检查点的两种实现:
(1)检查点算法的简单实现–暂停应用,保存状态到检查点,在重新恢复应用
(2)Flink基于检查点算法的优化实现–基于Chandy-Lamport算法的分布式快照,将检查点的保存和数据分开处理,不需要暂停整个应用,这里引入状态后端的概念。
以下介绍flink的检查点算法:
首先介绍一个概念:Checkpoint Barrier,记住他的作用哦
图片说明
图解检查点算法在flink任务流程中的实现原理:
1.两条流使用2个source来读取数据

图片说明
2.jobmanager会向每个source任务发送一个带有检查点id的消息,启动检查点(如图中ID=2)
图片说明
3.source将读取的偏移量状态写入检查点id为2的状态后端中,并发送一个barrier(检查点屏障–对应的id也为2);
状态后端保存完成会通知source任务,source任务会向jobmanager确认检查点完成(此处为异步操作)
图片说明
4.barrier–id=2会向下游传递,每到达一个分区,该分区中的数据就会被缓存到状态后端中
注:这里是transformation的过程
图片说明
图片说明
图片说明

5.直到sink向jobmanager确认状态保存到状态后端完成此次的cp就正式完成了,这就是flink的分布式快照实现。
注:source–transformation–sink是flink的基本架构,如果不明白可以去看一下flink的架构信息。相信理解了flink的架构能够更好地理解他的分布式快照流程。

图片说明

转发自:https://blog.csdn.net/DaDiNiWangGe/article/details/104516081