Flink 快照(Checkpoint)保留数量、保留时间 全套参数 + 配置
我给你最完整、最准确、面试 + 生产都能用的版本,直接复制即可。
一、核心结论(先记这 3 个参数)
Flink 控制 快照保留多少个、保留多久,就靠这 3 个配置:
- 保留最近多少个 Checkpoint
- Checkpoint 保留时间(超时时间)
- 取消任务时是否删除快照
二、具体参数(代码版 + yaml 版)
1. 保留最近 N 个 Checkpoint(最常用)
默认:只保留 1 个 生产建议:保留 2~3 个
代码设置
java
运行
// 保留最近 3 个 Checkpoint
checkpointConfig.setMaxNumberOfRetainedCheckpoints(3);
yaml 设置
yaml
execution.checkpointing.num-retained: 3
2. Checkpoint 保留时长(超时时间)
超过这个时间没用,自动删除。
代码设置
java
运行
// 保留 24 小时(单位毫秒)
checkpointConfig.setCheckpointRetention(24 * 60 * 60 * 1000);
yaml
yaml
execution.checkpointing.timeout: 3600000
3. 任务取消 / 失败时,是否保留 Checkpoint
代码
java
运行
// 取消任务时保留 Checkpoint(生产必开)
config.setExternalizedCheckpointCleanup(
CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION
);
yaml
yaml
execution.checkpointing.externalized-checkpoint-retention: RETAIN_ON_CANCELLATION
三、完整生产推荐配置(直接用)
yaml 完整版
yaml
# 每 30s 做一次 CK
execution.checkpointing.interval: 30000
# 最多同时进行 1 个 CK
execution.checkpointing.max-concurrent-checkpoints: 1
# 保留最近 3 个快照
execution.checkpointing.num-retained: 3
# 取消任务时保留 CK
execution.checkpointing.externalized-checkpoint-retention: RETAIN_ON_CANCELLATION
# CK 超时时间 10 分钟
execution.checkpointing.timeout: 600000
代码完整版
java
运行
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 30s 一次 CK
env.enableCheckpointing(30000);
CheckpointConfig config = env.getCheckpointConfig();
// 最多保留 3 个
config.setMaxNumberOfRetainedCheckpoints(3);
// 取消任务保留
config.setExternalizedCheckpointCleanup(RETAIN_ON_CANCELLATION);
// 异步快照
config.setAsyncSnapshot(true);
四、最关键的规则(面试必问)
- 保留数量优先 超过
num-retained:3→ 自动删除最旧的 - 保留时间次之超过保留时间 → 自动删除
- 取消任务是否保留
RETAIN_ON_CANCELLATION保留DELETE_ON_CANCELLATION删除
五、一句话背诵版(面试满分)
Flink 通过 execution.checkpointing.num-retained 设置保留最近多少个 Checkpoint,通过 timeout 设置保留时长,通过 externalized-checkpoint-retention 控制取消任务时是否保留;默认只保留 1 个,生产建议保留 2-3 个,防止快照损坏无法恢复。