位点随 checkpoint 提交
Flink CDC 的增量位点随 checkpoint 提交:源算子把 binlog 位点写进检查点,作业故障恢复时从最近一次成功的检查点续读。这意味着可能存在少量重复事件(检查点之后、故障之前已处理的数据),要靠下游幂等或 upsert 消化;如果作业没有开启 checkpoint,重启后只能按启动模式重新来过。
基本信息
| 位点提交时机 | 随 checkpoint 完成 |
|---|---|
| 恢复语义 | 从最近检查点续读,可能重复少量事件 |
| 下游要求 | upsert 与幂等写入消化重复 |
| 间隔权衡 | 过小则检查点开销大,过大则恢复回放量大 |
典型使用场景
- 生产作业必开:没有检查点就无法从断点恢复
- 恢复验证:从保存点恢复后确认位点与数据连续性
- 间隔调优:在恢复时长与检查点开销之间平衡
- 端到端语义确认:检查 Sink 是否支持事务或幂等
- 升级演练:把作业重启与升级流程纳入演练剧本
生产建议的检查点配置
生产建议的检查点配置
SET 'execution.checkpointing.interval' = '30s'; -- 检查点间隔
SET 'execution.checkpointing.mode' = 'EXACTLY_ONCE'; -- 检查点语义
-- 恢复示例:flink run -s :savepointPath: -c 主类 app.jar
-- 检查点存储需要配置为分布式存储,不能落在本机磁盘配置与影响
| 配置 | 含义 | 影响 |
|---|---|---|
| checkpointing.interval | 检查点间隔 | 过小开销大,过大恢复回放多 |
| checkpointing.mode | 检查点语义 | 精确一次针对 Flink 状态,不等于端到端 |
| 检查点存储位置 | 状态快照存放处 | 放本机磁盘则机器故障后无法恢复 |
| savepoint | 手动触发的一致性快照 | 作业升级与变更时的恢复点 |
端到端不重复还取决于 sink 是否支持事务或幂等:EXACTLY_ONCE 检查点语义针对的是 Flink 内部状态,不等于整条链路精确一次。
检查点存储放在本机磁盘是常见踩坑点:机器故障后检查点一起丢失,作业只能从头开始,必须放到分布式存储上。
检查点持续失败比作业崩溃更隐蔽:日志里只出现告警,作业看起来还在跑,但一旦重启就会回放很长的历史。把检查点成功率与最近一次成功检查点的时间纳入监控,比只盯作业是否存活更重要。