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

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

**

检查点的两种实现:

(1)检查点算法的简单实现–暂停应用,保存状态到检查点,在重新恢复应用

(2)Flink基于检查点算法的优化实现–基于Chandy-Lamport算法的分布式快照,将检查点的保存和数据分开处理,不需要暂停整个应用,这里引入状态后端的概念。

以下介绍flink的检查点算法:

首先介绍一个概念:Checkpoint Barrier,记住他的作用哦

Flink实时计算框架 flink算法_Flink实时计算框架


图解检查点算法在flink任务流程中的实现原理:

1.两条流使用2个source来读取数据

Flink实时计算框架 flink算法_数据_02

2.jobmanager会向每个source任务发送一个带有检查点id的消息,启动检查点(如图中ID=2)

Flink实时计算框架 flink算法_检查点_03


3.source将读取的偏移量状态写入检查点id为2的状态后端中,并发送一个barrier(检查点屏障–对应的id也为2);

状态后端保存完成会通知source任务,source任务会向jobmanager确认检查点完成(此处为异步操作)

Flink实时计算框架 flink算法_Flink实时计算框架_04


4.barrier–id=2会向下游传递,每到达一个分区,该分区中的数据就会被缓存到状态后端中

注:这里是transformation的过程

Flink实时计算框架 flink算法_Flink实时计算框架_05


Flink实时计算框架 flink算法_检查点_06


Flink实时计算框架 flink算法_Flink实时计算框架_07


5.直到sink向jobmanager确认状态保存到状态后端完成此次的cp就正式完成了,这就是flink的分布式快照实现。

注:source–transformation–sink是flink的基本架构,如果不明白可以去看一下flink的架构信息。相信理解了flink的架构能够更好地理解他的分布式快照流程。

Flink实时计算框架 flink算法_数据_08