Flink Checkpoint 流程解析
Checkpoint 流程解析
- Flink Checkpoint 流程解析
Checkpint 流程概括
任务运行后 JobMaster 定时执行 Checkpoint,JobMaster 会通过调用 CheckpointCoordinator 对作业进行 Checkpoint。
CheckpointCoordinator 开始进行 Checkpoint,它首先会先创建 PendingCheckpoint,然后开始给 Checkpoint 计时,再关闭网关开始触发 OperatorCoordinator 的 Checkpoint。
如果是 SourceOperatorCoordinator,则这时会调用 Source 的 getSplitSerializer,获取分片序列化器,然后将 SplitAssignmentTracker 中任务运行时分配的分片序列化创建 Snapshot,再将 Snapshot 放入 PendingCheckpoint 中。
OperatorCoordinator 状态触发完后,开始触发 MasterHooks 状态快照,MasterTriggerRestoreHook 由 UDFStreamOperator 内部的实现 WithMasterCheckpointHook 接口的 Function 创建,用于在 Master 触发 Checkpoint 时,Function 需要进行的操作。
MasterHooks 调用完后,CheckpointCoordinator 将给子任务 TaskManager 发送请求,通知它们开始 Checkpoint。
TaskExecutor 获取相应的任务 Task,Task 调用 StreamTask 开始进行 Checkpoint,StreamTask 调用 Mailbox 执行 Checkpoint 事件,Mailbox 执行 Checkpoint 事件时, Source 将不会从数据源读取数据。
Checkpoint 事件开始执行,如果 Checkpoint 需要强制对齐,那么需要异步创建 Channel 和结果分区的数据快照, 随后在执行传播 Barrier 前,SubtaskCheckpointCoordinatorImpl 会调用 OperatorChain 让 Operator 进行 Barrier 前的准备操作,然后开始往下游传播 Barrier。
SubtaskCheckpointCoordinatorImpl 创建 CheckpointBarrier 并将 CheckpointBarrier 发送给 RecordWriterOutput 将 Barrier 传输给下游任务,然后注册 Barrier 对齐超时计时器。
Barrier 传播完后,如果之前创建了 Channel 状态快照 ,那么还需要异步完成 Channel Output 的数据快照。
最后 SubtaskCheckpointCoordinatorImpl 开始对当前子任务的所有算子进行 Checkpoint,这时会进行算子创建快照时的操作,算子状态是存储在 OperatorStateBackend 和 KeyedStateBackend 中的, SubtaskCheckpointCoordinator 将会创建 OperatorStateBackend 和 KeyedStateBackend 的状态快照。
下游任务这时是正常处理上游发送过来的数据的,但是上游正在进行 Checkpoint,数据也是被发送过来的 CheckpointBarrier 分割开了,处理到后面会接收到上游的 CheckpointBarrier,也就表示着当前 Checkpoint 上游快照数据已经处理完,下游也开始进行 Checkpoint 了,下游进行 Checkpoint 的过程也是和上面的一样,继续调用 SubtaskCheckpointCoordinatorImpl 开始进行 Checkpoint。
总的来说,Checkpoint 将创建 Coordinator 状态、托管键值状态、托管算子状态、未处理的键值状态、未处理的算子状态、输入通道状态和结果分区状态的快照。
Checkpoint 触发流程解析 (Flink 1.20)
任务启动后 JobManager 开始定期对任务执行 Checkpoint
-
Task 任务恢复
Task#restoreAndInvoke
-
…
-
更新任务状态为 RUNNING 状态,TaskExecutor 通知 JobMaster 任务状态更新
TaskManagerActions#updateTaskExecutionState
TaskExecutor.TaskManagerActionsImpl#updateTaskExecutionState
JobMasterGateway#updateTaskExecutionState
-
…
-
-
JobMaster 调用 SchedulerBase、DefaultExecutionGraph 更新任务状态,定期触发 Checkpoint
JobMaster#updateTaskExecutionState
SchedulerBase#updateTaskExecutionState
DefaultExecutionGraph#updateState
DefaultExecutionGraph#updateStateInternal
-
[CheckpointCoordinator 开始定期执行 Checkpoint](#JobManager 使用 CheckpointCoordinator 触发 Checkpoint)
CheckpointCoordinator#startCheckpointScheduler
-
JobManager 使用 CheckpointCoordinator 触发 Checkpoint
-
JobMaster 触发 Checkpoint
JobMaster#triggerCheckpoint
-
调度器触发 Checkpoint
SchedulerNG#triggerCheckpoint
-
从 ExecutionGraph 中获取 CheckpointCoordinator,创建
-
-