本章内容
- 一致性检查点
- 从检查点恢复状态
- 检查点实现算法-barrier
- 保存点Savepoint
- 状态后端(state backend)
本文先设置一个前提,流处理的数据都是可回放的(可以理解成消费的kafka的数据)
一致性检查点(checkpoints)
图1
- checkpoint是Flink故障恢复的核心,全称是应用状态的一致性检查点
- 有状态流应用的一致性检查点,其实就是所有任务处理完数据的状态,在某个时间点的一份拷贝(一份快照,存储在状态后端),这个时间点,应用是所有任务能恰好处理完一个相同的输入数据的时候
(图1中不考虑时间,假设1、2、3、4、5、6、7为source源,even为偶数6=2+4,odd为奇数求和9=1+3+5,此时5这个数据在所有tasks都处理完成了,每个任务都会提交一份快照给JM,最终这份拓扑结构(source任务状态是5、sum_even状态是6、sum_odd状态是9)称为checkpoint)
从检查点恢复状态
图2
- 在执行流应用期间,Flink会定期保存状态的一致性检查点
- 如果发生故障,Flink会使用最近的检查点来一致恢复应用程序的状态,并重新启动处理流程
(假设处理到7这个数据的时候,sum_even=2+4+6=12,sum_odd在处理7这个数据的时候fail了,应该如果恢复数据呢)
第一步:遇到故障之后,重启受影响的应用,应用重启的之后,所有任务的状态都是空的