Flink Checkpoint配置与全流程解析
请详细说明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模式):
- JobManager触发:JM向所有Source Operator发送Barrier(编号N)
- Source端对齐:Source接收到Barrier N后,将当前状态快照写入State Backend,然后向所有下游广播Barrier N
- Barrier对齐:Operator等待所有上游分区的Barrier N都到达后才执行快照(对齐期间缓存后续数据,不处理)
- 状态快照:将Operator的状态(ValueState/ListState等)异步写入State Backend
- 确认完成:每个Operator快照完成后向JM发送ACK
- 全局完成:JM收到所有Operator的ACK后,标记Checkpoint N完成
AT_LEAST_ONCE模式: Barrier不要求对齐,收到第一个就快照,吞吐更高但可能有重复
增量Checkpoint(RocksDB):
- 只保存从上一次Checkpoint以来的变化(SST文件差异)
- 大幅减少存储和网络传输量