Flink的四大基石之---Checkpoint详解
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栅栏信号(栅栏对齐)。
