1- 容错机制Checkpoint检查点理解
- 首先状态State与检查点Checkpoint之间关系:
Checkpoint将某个时刻应用状态State进行快照Snapshot保存
。
1)、State
:维护/存储的是某一个Operator的运行的状态/历史值,是维护在内存中。
2)、Checkpoint
:某一时刻,Flink中所有的Operator的当前State的全局快照,一般存在磁盘上。
- Flink中的Checkpoint底层使用了
Chandy-Lamport algorithm
分布式快照算法,可以保证数据的在分布式环境下的一致性。
网站:https://zhuanlan.zhihu.com/p/53482103
2- Checkpoint 执行流程(简易版)
- Flink Checkpoint进行检查点Checkpoint时,执行流程,先看
简易版
描述。 - barrier:
栅栏,相当于标识符,表示对应用中各个OperatorState进行快照时,到哪个位置
。
- 1)、Flink的`JobManager`创建`CheckpointCoordinator`
- 2)、Coordinator向所有的`SourceOperator`发送Barrier栅栏(理解为执行Checkpoint的信号)
- 3)、SourceOperator接收到Barrier之后,暂停当前的操作(暂停的时间很短,因为后续的写快照是异步的),并制作State快照, 然后将自己的快照保存到指定的介质中(如HDFS), 一切 ok之后向Coordinator汇报并将Barrier发送给下游的其他Operator;
- 4)、其他的如TransformationOperator接收到Barrier,重复第2步,最后将Barrier发送给Sink;
- 5)、Sink接收到Barrier之后重复第2步;
- 6)、Coordinator接收到所有的Operator的执行ok的汇报结果,认为本次快照执行成功;
3- Checkpoint 执行流程(复杂版)
具体看一下Flink Checkpoint时详细版执行流程:
下图左侧是 Checkpoint Coordinator,是整个 Checkpoint的发起者,中间是由两个
source,一个 sink 组成的Flink作业,最右侧的是持久化存储,在大部分用户场景中
对应 HDFS
1)、Checkpoint Coordinator 向所有 source 节点 trigger Checkpoint
2)、source 节点向下游广播 barrier,这个 barrier 就是实现 Chandy-Lamport 分布式快照算法的核心,下游的 task 只有收到所有 input 的 barrier
才会执行相应的 Checkpoint
3)、当 task 完成 state 备份后,会将备份数据的地址(state handle)通知给 Checkpointcoordinator
4)、下游的 sink 节点收集齐上游两个 input 的 barrier 之后,会执行本地快照,(栅栏对齐)
展示了 RocksDB
incremental Checkpoint (增量Checkpoint)的流程,首先 RocksDB 会全量刷数据到磁盘上(红色大三角表示),然后 Flink 框架会从中选择没有上传的文件进行持久化备份(紫色小三角)。
5)、同样的,sink 节点在完成自己的 Checkpoint 之后,会将 state handle 返回通知Coordinator
6)、最后,当 Checkpoint coordinator 收集齐所有 task 的 state handle,就认为这一次的Checkpoint 全局完成了,向持久化存储中再备份一个 Checkpoint meta 文件。
下游Operator进行Checkpoint时,必须要收集到上游所有Task发送过来Barrier栅栏信号(栅栏对齐)。