一致性检查点(Checkpoints)
-
Flink 故障恢复机制的核心,就是应用状态的一致性检查点
-
有状态流应用的一致检查点,其实就是所有任务的状态,在某个时间点的一份拷贝(一份快照);这个时间点,应该是所有任务都恰好处理完一个相同的输入数据的时候(如5这个数据虽然进了奇数流但是偶数流也应该做快照,因为属于同一个相同数据,只是没有被他处理)
-
在JobManager中也有个Chechpoint的指针,指向了仓库的状态快照的一个拓扑图,为以后的数据故障恢复做准备
从检查点恢复状态
- 在执行流应用程序期间,Flink 会定期保存状态的一致检查点
- 如果发生故障, Flink 将会使用最近的检查点来一致恢复应用程序的状态,并重新启动处理流程(如图中所示,7这个数据被source读到了,准备传给奇数流时,奇数流宕机了,数据传输发生中断)
- 遇到故障之后,第一步就是重启应用(重启后的流都是空的)
- 第二步是从 checkpoint 中读取状态,将状态重置(读取在远程仓库(Storage,这里的仓库指状态后端保存数据指定的三种方式之一)保存的状态),从检查点重新启动应用程序后,其内部状态与检查点完成时的状态完全相同
- 第三步:开始消费并处理检查点到发生故障之间的所有数据
- 这种检查点的保存和恢复机制可以为应用程序状态提供“精确一次”(exactly-once)的一致性,因为所有算子都会保存检查点并恢复其所有状态,这样一来所有的输入流就都会被重置到检查点完成时的位置
Chandy-Lamport 算法
在上图所示的数据7,同样被Source读取后,在传向奇数流时,奇数流宕机了,那么这个数据7在开始已经Source读取了,但是由于宕