Flink的分布式快照(检查点算法)原理--基于Chandy-Lamport算法

Flink的恢复机制的核心就是应用状态的一致性检查点,有状态流的一致性检查点,其实就是所有状态在某个时间点的一份快照拷贝,而这个时间点应该是所有任务都恰好处理完同一个输入数据。
**

Flink使用的检查点算法是分布式快照算法(基于Chandy-Lamport算法的分布式快照)

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

2.jobmanager会向每个source任务发送一个带有检查点id的消息,启动检查点(如图中ID=2)
Flink的分布式快照(检查点算法)原理--基于Chandy-Lamport算法_第3张图片
3.source将读取的偏移量状态写入检查点id为2的状态后端中,并发送一个barrier(检查点屏障–对应的id也为2);
状态后端保存完成会通知source任务,source任务会向jobmanager确认检查点完成(此处为异步操作)

Flink的分布式快照(检查点算法)原理--基于Chandy-Lamport算法_第4张图片
4.barrier–id=2会向下游传递,每到达一个分区,该分区中的数据就会被缓存到状态后端中
注:这里是transformation的过程
Flink的分布式快照(检查点算法)原理--基于Chandy-Lamport算法_第5张图片
Flink的分布式快照(检查点算法)原理--基于Chandy-Lamport算法_第6张图片
Flink的分布式快照(检查点算法)原理--基于Chandy-Lamport算法_第7张图片
5.直到sink向jobmanager确认状态保存到状态后端完成此次的cp就正式完成了,这就是flink的分布式快照实现。
注:source–transformation–sink是flink的基本架构,如果不明白可以去看一下flink的架构信息。相信理解了flink的架构能够更好地理解他的分布式快照流程。
Flink的分布式快照(检查点算法)原理--基于Chandy-Lamport算法_第8张图片

你可能感兴趣的:(flink)