A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

概述



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。

2. 当某个source算子收到一个barrier时,便暂停数据处理过程,然后将自己的当前状态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告自己快照制作情况,同时向自身所有下游算子广播该barrier,恢复数据处理 。

3. 下游算子收到barrier之后,会暂停自己的数据处理过程,然后将自身的相关状态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告自身快照情况,同时向自身所有下游算子广播barrier,恢复数据处理。

4. 每个算子按照步骤3不断制作快照并向下游广播,直到最后barrier传递到sink算子,快照制作完成。

5. 当CheckpointCoordinator收到所有算子的报告之后,认为该周期的快照制作成功; 否则,如果在规定的时间内没有收到所有算子的报告,则认为本周期快照制作失败。

两个输入源checkpoint实现流程


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

1. 假设算子C有A和B两个输入源 ,在第i个快照周期中,由于某些原因(如处理时延、网络时延等)输入源A发出的barrier先到来,这时算子C暂时将输入源A的输入通道阻塞,仅收输入源B的数据。

2. 当输入源B发出的barrier到来时,算子C制作自身快照并向CheckpointCoordinator报 告自身的快照制作情况,然后将两个barrier合并为一个,向下游所有的算子广播。

3. 当由于某些原因出现故障时,CheckpointCoordinator通知流图上所有算子统一恢复到某个周期的checkpoint状态,然后恢复数据流处理。分布式checkpoint机制保证了数据仅被处理一次(Exactly Once)。


小结


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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马