首页/数据/数仓建模速查/Savepoint:作业升级与状态迁移
湖仓与引擎63 条

Savepoint:作业升级与状态迁移

Savepoint 是手工触发的状态快照,用于作业变更(并行度、逻辑)后的状态恢复;升级前先停机打点,再从保存点启动新版本。

数仓建模速查数据更新于 2026-10-13

Savepoint:作业升级与状态迁移

Savepoint 是手工触发的一致性状态快照,用途是作业升级与迁移:调整并行度、修改逻辑、更换集群之前先停机打点,再从保存点启动新版本,状态被映射到新的拓扑结构上。与之相对,checkpoint 是自动周期性触发的故障恢复机制,不承担版本管理职责。

基本信息

触发方式手动
典型用途版本升级、迁移、并行度调整
恢复方式从保存点路径启动新作业
关键约束算子 UID 必须稳定
区别于checkpoint 面向故障自动恢复

典型使用场景

  • 版本升级:停机打点、部署新 jar、从保存点恢复
  • 并行度调整:扩容或缩容后,从保存点恢复作业状态
  • 逻辑变更:确认改动不影响状态映射关系后再恢复
  • 灰度与回滚:保留保存点作为回滚基线
  • 停机维护:用 stop 带保存点的方式优雅停止作业

Savepoint 操作

Savepoint 操作
# 触发保存点(作业运行时也可执行)
flink savepoint <jobId> hdfs:///flink/savepoints
# 优雅停止并同时生成保存点
flink stop --savepointPath hdfs:///flink/savepoints <jobId>
# 从保存点恢复启动新版本作业
flink run -s hdfs:///flink/savepoints/savepoint-<id> -d new-job.jar
# 恢复前先确认保存点目录完整、元数据可读,避免停机窗口被拉长

Savepoint 与 Checkpoint

项目SavepointCheckpoint
触发手动自动周期
主要用途版本升级与迁移故障自动恢复
保留长期保留按策略保留最近几次
状态映射依赖算子 UID同样依赖 UID
算子如果不指定稳定的 uid,调整逻辑后状态无法映射到新算子,恢复会失败或状态被丢弃,只能从零开始重放历史数据。
保存点的兼容性取决于状态结构与 uid 是否稳定:改变算子顺序、增删带状态的算子都要提前评估,并在测试环境先做一次恢复演练。
允许跳过无法映射的状态(allowNonRestoredState)是应急手段,不是常规做法:它能快速让作业起来,但被丢弃的状态对应的业务数据会静默变成空白。

易错点

  • 算子未设置 uid:逻辑调整后无法从保存点恢复,状态丢失需要重放历史数据
  • 升级前只打点不验证:恢复时才发现目标版本不兼容,停机窗口被拉长
  • 用 checkpoint 代替保存点做版本升级:checkpoint 保留策略较短,很可能已被清理
  • 保存点存储路径容量不足或权限不对:打点失败,作业既停不下来也升不上去

数据来源与参考

  • Apache Flink 官方文档:Savepoints
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌