Flink Savepoint与Checkpoint的核心区别
Flink中Savepoint和Checkpoint都是状态快照,但设计目标和用途不同。请详细对比两者的区别,包括触发方式、生命周期、应用场景(如版本升级/代码变更/SQL变更/扩缩容时的处理策略)。
回答
编译有声
| 维度 | Checkpoint | Savepoint |
|---|---|---|
| 触发 | 自动周期触发 | 手动触发 |
| 目标 | 故障恢复 | 维护操作(升级/扩缩容) |
| 生命周期 | 自动清理(TTL过期) | 用户自行管理(永久保留) |
| 格式 | 标准状态后端格式(单文件) | 标准格式,支持跨版本兼容 |
| 存储路径 | state.checkpoints.dir | 自定义路径 |
| 作业ID变化 | 仅限同作业ID恢复 | 支持恢复时变更作业ID |
| 并发度修改 | ❌ 不支持 | ✅ 支持(rescale模式) |
典型应用场景:
- Flink版本升级:Savepoint → 停止旧作业 → 升级Flink → 从Savepoint启动新作业
- SQL DDL变更:修改SQL逻辑后,从Savepoint恢复状态(需状态兼容)
- 并行度调整:Savepoint支持Rescale,Checkpoint不支持
- 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