启动模式决定从哪读
scan.startup.mode 决定 Flink CDC 源从何处开始消费:initial(默认,先做全量快照再无缝跟踪增量)、earliest-offset(从当前可用最早位点回放,不做快照)、latest-offset(只消费之后的新变更)、specific-offset(从指定的文件名与偏移或 GTID 开始)、timestamp(从指定时间点对应的位点开始)。无状态作业从 latest-offset 起会直接跳过历史,有状态作业通常用 initial 或依赖状态恢复。
基本信息
| 默认值 | initial:先全量快照,再跟踪增量 |
|---|---|
| 无状态场景 | 需显式选择,否则容易漏历史或重复全量 |
| 有状态场景 | 状态恢复时启动模式参数通常不再生效 |
| 依赖边界 | 能回放多久取决于源端 binlog 保留期 |
典型使用场景
- 首次上线:用 initial 一次性把历史与增量接完整
- 只关心新数据:用 latest-offset 跳过历史全量
- 按时间补数:用 timestamp 从指定时间点开始对齐
- 精确续跑:用 specific-offset 从已知位点继续
- 问题回放:用 earliest-offset 从最早可用位点重放验证
SQL 中显式指定
SQL 中显式指定
-- 建表时显式指定启动模式
'scan.startup.mode' = 'latest-offset'
-- 其他可选值:initial / earliest-offset / timestamp / specific-offset
-- specific-offset 需要同时给出位点信息,例如文件名与偏移(或 GTID),只给文件名会启动失败取值与行为
| 取值 | 行为 | 典型用途 |
|---|---|---|
| initial | 先全量快照再跟增量(默认) | 首次接入 |
| earliest-offset | 从当前最早位点开始回放 | 需要重建历史 |
| latest-offset | 只消费之后的新变更 | 只关心增量 |
| specific-offset | 从指定位点开始 | 精确续跑 |
| timestamp | 从指定时间点对应的位点开始 | 按时间对齐补数 |
earliest-offset 能追回多少历史完全取决于 binlog 保留期,保留期之外的数据同样拿不到,不要把它当成「一定能拿到全量」。
有状态作业从检查点恢复时位点来自状态而不是启动参数,顺带把启动模式改掉通常不会按预期生效,改参数前先确认作业是否走状态恢复。
切换启动模式往往意味着「重新取数」,切换前先确认下游能否承受一次全量重放:如果下游是按分区覆盖写入,重放相对安全;如果是累加型指标,重放会让数值翻倍,必须先清理目标分区。