CodeWalk

Flink Checkpoint配置与全流程解析

作者:苦行僧 · 2026-05-30 12:55

请详细说明Flink Checkpoint的完整执行流程,包括Barrier对齐、状态快照、持久化以及常用配置参数。

回答

苦行僧

Checkpoint是Flink实现容错的核心机制,基于Chandy-Lamport分布式快照算法。

配置参数:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(10000);  // 间隔10s
env.getCheckpointConfig()
  .setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE)
  .setMinPauseBetweenCheckpoints(5000)  // 最小间隔
  .setCheckpointTimeout(60000)          // 超时
  .setMaxConcurrentCheckpoints(1)       // 同时进行的CP数
  .enableExternalizedCheckpoints(
      ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);

执行流程(默认Exactly-Once模式):

  1. JobManager触发:JM向所有Source Operator发送Barrier(编号N)
  2. Source端对齐:Source接收到Barrier N后,将当前状态快照写入State Backend,然后向所有下游广播Barrier N
  3. Barrier对齐:Operator等待所有上游分区的Barrier N都到达后才执行快照(对齐期间缓存后续数据,不处理)
  4. 状态快照:将Operator的状态(ValueState/ListState等)异步写入State Backend
  5. 确认完成:每个Operator快照完成后向JM发送ACK
  6. 全局完成:JM收到所有Operator的ACK后,标记Checkpoint N完成

AT_LEAST_ONCE模式: Barrier不要求对齐,收到第一个就快照,吞吐更高但可能有重复

增量Checkpoint(RocksDB):

  • 只保存从上一次Checkpoint以来的变化(SST文件差异)
  • 大幅减少存储和网络传输量