【Flink】Flink 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,创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值