赞
踩
如果让你来做一个有状态流式应用的故障恢复,你会如何来做呢?
单机和多机会遇到什么不同的问题?
Flink Checkpoint 是做什么用的?原理是什么?
Checkpoint 是对当前运行状态的完整记录。程序重启后能从 Checkpoint 中恢复出输入数据读取到哪了,各个算子原来的状态是什么,并继续运行程序。
即用于 Flink 的故障恢复。
这种机制保证了实时程序运行时,即使突然遇到异常也能够进行自我恢复。
如果让你来设计,对于流式应用如何做到故障恢复?
我们从最简单的单机单线程看起。
很简单,这种情况下,整个流程一次只处理一条数据。
每个计算节点还是只处理一条数据,但该节点空闲就可以处理下一条数据。
如果还按照一个数据 Write 阶段结束开始保存状态,就会出现问题:
一种解决方式:
这样,各个节点保存的都是相同数据节点时的状态。
故障恢复时,能做到不重复处理数据,也就是精确一次(Exactly-once)。
但这里,你可能会发现一个问题:
这里实际是**「程序内部精确一次」和「端到端精确一次」**。
那么如何做到「端到端精确一次」?
不过以上方法为了做到端到端精确一次,会带来数据延迟问题。(因为要等 Checkpoint 做完,数据才实际可读)。
解决数据延迟有一种方案:
前面的例子中,我们提到了部分一致性级别,这里我们总结下。在流处理中,一致性可以分为 3 个级别:
按区间分:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。