一、核心结论
-
原 State 数据仍可用
- 只要作业的 拓扑结构(DAG) 和 状态类型(StateDescriptor) 未发生变更,旧的 Checkpoint 依然有效。
- Checkpoint 间隔调整仅影响 新生成的 Checkpoint 频率,与历史 Checkpoint 无关。
-
恢复机制
- Flink 在恢复作业时,默认会选择 最近一次成功的 Checkpoint(无论新旧间隔)。
- 可通过
-s
参数显式指定任意历史 Checkpoint 路径进行恢复
二、Checkpoint 兼容性规则
1. 兼容场景
变更类型 | 是否兼容 |
---|---|
Checkpoint 间隔调整 | ✅ 兼容 |
Checkpoint 超时时间调整 | ✅ 兼容 |
并行度调整 | ✅ 兼容 |
重启策略调整 | ✅ 兼容 |
2. 不兼容场景
变更类型 | 是否兼容 | 解决方案 |
---|---|---|
算子拓扑结构变更 | ❌ 不兼容 | 使用 Savepoint 迁移 |
状态类型或序列化器变更 | ❌ 不兼容 | 重写状态逻辑 |
状态后端类型变更(如 Heap → RocksDB) | ❌ 不兼容 | 需迁移工具 |
三、操作验证
1. 验证旧 Checkpoint 有效性
# 使用历史 Checkpoint 恢复作业
flink run -d -s hdfs:///checkpoints/old-checkpoint-123 ./your-job.jar
2. 新旧配置对比示例
// 旧配置:每分钟触发一次 Checkpoint
env.enableCheckpointing(60_000);
// 新配置:每5分钟触发一次 Checkpoint(仅影响新生成的 Checkpoint)
env.enableCheckpointing(300_000);
总结
调整 Checkpoint 间隔,不会破坏已有 State 数据的可用性。