一致性检查点(Checkpoints)
-
Flink 故障恢复机制的核心,就是应用状态的一致性检查点
-
有状态流应用的一致检查点,其实就是所有任务的状态,在某个时间点的一份拷贝(一份快照);这个时间点,应该是所有任务都恰好处理完一个相同的输入数据的时候(如5这个数据虽然进了奇数流但是偶数流也应该做快照,因为属于同一个相同数据,只是没有被他处理)
-
在JobManager中也有个Chechpoint的指针,指向了仓库的状态快照的一个拓扑图,为以后的数据故障恢复做准备

从检查点恢复状态
- 在执行流应用程序期间,Flink 会定期保存状态的一致检查点
- 如果发生故障, Flink 将会使用最近的检查点来一致恢复应用程序的状态,并重新启动处理流程(如图中所示,7这个数据被source读到了,准备传给奇数流时,奇数流宕机了,数据传输发生中断)

- 遇到故障之后,第一步就是重启应用(重启后的流都是空的)

- 第二步是从 checkpoint 中读取状态,将状态重置(读取在远程仓库(Storage,这里的仓库指状态后端保存数据指定的三种方式之一)保存的状态),从检查点重新启动应用程序后,其内部状态与检查点完成时的状态完全相同

- 第三步:开始消费并处理检查点到发生故障之间的所有数据
- 这种检查点的保存和恢复机制可以为应用程序状态提供“精确一次”(exactly-once)的一致性,因为所有算子都会保存检查点并恢复其所有状态,这样一来所有的输入流就都会被重置到检查点完成时的位置

Chandy-Lamport 算法
在上图所示的数据7,同样被Source读取后,在传向奇数流时,奇数流宕机了,那么这个数据7在开始已经Source读取了,但是由于宕机,奇数流又没有处理到这个数据7

本文深入探讨Flink的容错机制,重点介绍一致性检查点的概念,阐述如何从检查点恢复状态,并详细解析Chandy-Lamport算法在Flink检查点中的应用。同时,讨论了Flink检查点算法的分界线策略和保存点(Savepoints)的差异。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



