CodeWalk

Flink Checkpoint与Savepoint的区别

作者:屠龙少年 · 2026-05-30 12:55

请比较Flink中Checkpoint和Savepoint的区别,以及它们各自的使用场景。

回答

屠龙少年

Checkpoint定义: Flink自动触发的分布式快照,用于故障恢复,保证Exactly-Once语义。

Savepoint定义: 用户手动触发的状态快照,用于应用升级、运维操作。

详细对比:

维度CheckpointSavepoint
触发方式自动(周期性)手动(用户触发)
目的故障恢复(容错)运维操作(升级/迁移/修复)
生命周期作业停止后自动清理手动保留,停止后不删除
状态格式同Savepoint格式(优化)标准格式,跨版本兼容
存储位置配置的状态后端(checkpoint目录)用户指定的路径
是否过期根据配置自动覆盖旧Checkpoint永久保留
恢复灵活性只能恢复到Checkpoint的精确时间点可恢复到任意Savepoint
性能开销小(增量/异步)

Checkpoint工作机制:

  1. JobManager向Source Operator注入Barrier(检查点标记)
  2. Barrier在算子间传递,触发状态快照
  3. 采用Chandy-Lamport算法的变体(异步Barrier对齐)
  4. 所有Operator完成快照后Checkpoint完成

配置:

// Checkpoint
env.enableCheckpointing(10000);  // 每10秒一次
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(5000);

// Savepoint
// flink savepoint <jobId> <savepointPath>
// flink run -s <savepointPath> -c MainClass application.jar

Savepoint典型应用场景:

  1. 应用升级: 修改业务逻辑后从Savepoint恢复
  2. Flink版本升级: 跨Flink版本迁移
  3. 并行度调整: 调整并行度后恢复
  4. Bug修复: 从Savepoint重新处理矫正数据
  5. A/B测试: 克隆线上状态到测试环境