Flink的checkpoint机制

概述




checkpoint机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一状态,保证应用流图状态的一致性。

checkpoint机制的实现流程



Flink的checkpoint是由JobMaster发起的,程序开启checkpoint机制,当程序启动时,JobMaster就会创建一个CheckpointCoordinator,周期性按照顺序向下游算子发送barrier,对每个算子的计算状态数据进行备份,当最后一个算子的计算状态数据备份成功,那么本次的checkpoint完成。当发生故障时,程序只需读取最近一个成功checkpoint的备份数据进行算子计算状态恢复。

涉及到的组件和概念



JobMaster:JobMaster是Flink中主节点,主要负责任务接收、分发和协调执行,负责checkpoint的执行和数据的恢复。
barrier:barrier是一个轻量级的数据被按一定的规则(调度)插入到原始数据流中,这个数据不会影响原有数据处理的性能,不会改变原始数据的顺序。CheckpointCoordinator:检查点协调器,时程序启动时JobMaste中开启的一个线程,每个需要checkpoint的应用在启动时,Flink的JobManager为其创建一个 CheckpointCoordinator,CheckpointCoordinator全权负责本应用的快照制作。
source算子:加载数据源数据的算子。
中间算子:所有中间对数据进行处理转换的算子。
sink算子:最后进行数据落地的算子。
快照:算子的某个时间点计算状态数据的备份。

checkpoint流程的具体解析
单个输入源checkpoint 实现流程



1. CheckpointCoordinator周期性的向该流应用的所有source算子发送barrier。
164027i31yoxwh4wxyywv4.png.thumb.jpg
2. 当某个source算子收到一个barrier时,便暂停数据处理过程,然后将自己的当前状态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告自己快照制作情况,同时向自身所有下游算子广播该barrier,恢复数据处理 。
164138rmuh7auhj97r9sc9.png.thumb.jpg
3. 下游算子收到barrier之后,会暂停自己的数据处理过程,然后将自身的相关状态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告自身快照情况,同时向自身所有下游算子广播barrier,恢复数据处理。
164202v3xpps7bbg6qobi3.png.thumb.jpg
4. 每个算子按照步骤3不断制作快照并向下游广播,直到最后barrier传递到sink算子,快照制作完成。
164257ndyohy7vcw7ey7bv.png.thumb.jpg
5. 当CheckpointCoordinator收到所有算子的报告之后,认为该周期的快照制作成功; 否则,如果在规定的时间内没有收到所有算子的报告,则认为本周期快照制作失败。

两个输入源checkpoint实现流程



如果一个算子有两个输入源,则暂时阻塞先收到barrier的输入源,等到第二个输入源相同编号的barrier到来时,再制作自身快照并向下游广播该barrier。具体步骤如下。

1. 假设算子C有A和B两个输入源 ,在第i个快照周期中,由于某些原因(如处理时延、网络时延等)输入源A发出的barrier先到来,这时算子C暂时将输入源A的输入通道阻塞,仅收输入源B的数据。
164444wlbr2jvrbbmrbwm0.png.thumb.jpg 
2. 当输入源B发出的barrier到来时,算子C制作自身快照并向CheckpointCoordinator报 告自身的快照制作情况,然后将两个barrier合并为一个,向下游所有的算子广播。
164505ih717t51teh7r24t.png.thumb.jpg 
3. 当由于某些原因出现故障时,CheckpointCoordinator通知流图上所有算子统一恢复到某个周期的checkpoint状态,然后恢复数据流处理。分布式checkpoint机制保证了数据仅被处理一次(Exactly Once)。
164525sjz3fvplf2nzvffj.png.thumb.jpg 

小结



checkpoint机制是Flink的重要特性,他是Flink的容错的轻量级实现,当Flink程序运算出错,只需要在checkpoint
保存的运算状态数据中恢复数据即可,不需要进行重新的运算去恢复数据。掌握checkpoint机制是学习Flink的重要
环节。

文章来源于公总号黑马程序员广州中心(itheimagz)更多资源请关注

image.png




猜你喜欢

转载自blog.51cto.com/14500648/2430118