CodeWalk

Flink Savepoint与Checkpoint的核心区别

作者:编译有声 · 2026-05-30 12:55

Flink中Savepoint和Checkpoint都是状态快照,但设计目标和用途不同。请详细对比两者的区别,包括触发方式、生命周期、应用场景(如版本升级/代码变更/SQL变更/扩缩容时的处理策略)。

回答

编译有声

维度CheckpointSavepoint
触发自动周期触发手动触发
目标故障恢复维护操作(升级/扩缩容)
生命周期自动清理(TTL过期)用户自行管理(永久保留)
格式标准状态后端格式(单文件)标准格式,支持跨版本兼容
存储路径state.checkpoints.dir自定义路径
作业ID变化仅限同作业ID恢复支持恢复时变更作业ID
并发度修改❌ 不支持✅ 支持(rescale模式)

典型应用场景

  1. Flink版本升级:Savepoint → 停止旧作业 → 升级Flink → 从Savepoint启动新作业
  2. SQL DDL变更:修改SQL逻辑后,从Savepoint恢复状态(需状态兼容)
  3. 并行度调整:Savepoint支持Rescale,Checkpoint不支持
  4. Spark/Flink迁移:跨引擎状态恢复(需自定义)

使用示例

# 触发Savepoint
flink savepoint -p /savepoint-dir JobID
# 从Savepoint启动
flink run -s /savepoint-dir/savepoint-xxx
# 扩缩容从Savepoint启动
flink run -s /savepoint-dir -p 20 app.jar