检查点的保存
周期性触发保存
还原现场
检查点分界线(Barrier)
Flink采用Chandy-Lamport算法的分布式快照。
Barrier不会像水位线一样不断生产。只在JM发送保存checkpoint指令时,由source任务中生产一条。
当JobManager发送指令:“兄弟们,开始保存checkpoint啦!”
source任务(各子任务)生产插入一个Barrier!并将读取的offset保存起来(用于还原现场)
Barrier对齐精准一次
1、source所有并发都会生成一个barrirer,存好offset。
2、offset存好后,会通知source,报告大哥,offset已经保存完毕。source收到消息后,会报告给JM:报告大哥,source检查点完毕。
3、当下游出现宽依赖的情况,将barrier广播下去。
4、当出现宽依赖的时候,下游会接收到上游多个barrirer。
5、当某个子任务的barrier未到齐时,会停下来等着。
6、当属于本次checkpoint的数据到达时,计算进去。
7、当下一个checkpoint的数据提前到来时,缓存起来。等待barrier到齐,处理完本次checkpoint再计算。
8、当各个分区的barrier都到齐后,就可以对当前算子的状态做checkpoint。
总结
Barrier对齐至少一次
精准一次中第7步中,先到的barrier的下一个checkpoint的数据先到了,不再缓存,而是计算进来,保存状态。那么出现故障重启,介于到了和没到的barrier之间的数据,会出现重复计算。多算了,称为至少一次。
优点:不缓存,不等,压力不大
缺点:重复计算
非Barrier对齐精准一次
每个算子节点,前面有个输入缓冲区,后面有个输出缓冲区。
Barrier总结
检查点API
Barrier对齐
非Barrier对齐
增量checkpoint changelog
.
保存点(Savepoint)
原理和算法和检查点相同,触发时机不同。手动存盘。
比如更改代码上线之前,需要手动保存。