1.Flink 检查点算法 -15
1.Flink检查点算法
Flink的检查点是基于Chandy-Lamport分布式快照算法来实现的,该算法不会暂停整个应用,而是会把生成检查点的过程和处理过程分离,这样在部分任务持久化状态的过程中,其它任务可以继续执行
2.Flink检查点算法原理
(1)Flink的检查点算法中用到一类名为检查点分隔符(checkpotin barrier)的特殊记录,和水位线类型
(2)这些检查点分隔符会通过数据源算子注入到常规的记录流中
(3)相对其它记录,它们在流中的位置无法提前或延后
(4)为了标识不同检查点分隔符,每个都会带有一个编号
(5)数据流从逻辑上分成两部分:所有先于分隔符的记录所引起的状态更新都包含在分隔符所对应的检查点中,所有后于分隔符的记录引起的状态更新都会被纳入之后的检查点
3.通过实例来解释该算法
两个数据源任务,每个任务都会各自消费一条自增数字流,数据源任务输出会被分为奇数流和偶数流两部分,每一部分都有一个任务负责对收到的数字求和,并将结果值更新到下游数据汇。
4.生成检查点
(1)JobManager会向每个数据源任务发送一个新的检查点变化,以此来启动检查点生成流程
(2)当一个数据源收到消息后,会暂停发出记录,利用状态后端触发生成本地检查点,并将检查点分隔符连同检查点广播到所有传出的数据流分区
(3)状态后端会在状态存为检查点完成后通知任务,随后任务会给JobManager发送确认消息
(4)在所有分隔符发出后,数据源将恢复正常工作状态
(5)通过向输出流中注入分隔符,数据源函数定义了需要在流中哪些位置生成检查点
5.检查点分隔符对齐
(1)数据源任务发出的检查点分隔符传输到与之相连的任务
(2)检查点分隔符总是以广播的形式发送,确保每个任务能从它们的每个输入都收到一个分隔符
(3)当任务收到一个新的检查点分隔符时,会继续等待所有其它输入分区也收到检查点分隔符
(4)在等待过程中,它会继续处理那些未提供分隔符的分区发来的数据。
(5)对于已经提供分隔符的分区,它们的数据会被缓存起来,不能处理
(6)这个等待所有分隔符到达的过程称为分隔符对齐。
6.分隔符对齐后处理
(1)任务在收齐全部输入分区发送的分隔符后,就会通知状态后端开始生成检查点
(2)同时把检查点分隔符广播到下游相连任务
(3)任务在发出所有的检查点分隔符后就会开始处理缓冲的记录
(4)所有缓冲处理完成,任务就会继续处理输入流
7.最终检查点分割符到达数据汇任务
(1)数据汇任务在收到分隔符后会依次执行分割符对齐,将自身状态写入检查点
(2)向JobManager确认已经收到分隔符等一系列动作
(3)JobManager在接收到所有应用任务返回的检查点确认消息后,就会将此检查点标记为完成
(4)如果应用发生故障就可以利用这个生成好的检查点进行恢复。
评论