首页/数据/数据工程与 ETL 速查/flink-cdc scan.startup.mode 启动模式
CDC 与同步53 条

flink-cdc scan.startup.mode 启动模式

scan.startup.mode 决定 CDC 源从何处开始消费:initial(默认,先快照全量再跟增量)、earliest-offset、latest-offset、specific-offset、timestamp。无状态作业从 latest-offset 起会跳过历史,有状态作业通常用 initial 或直接依赖状态恢复。

启动模式决定从哪读

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 保留期,保留期之外的数据同样拿不到,不要把它当成「一定能拿到全量」。
有状态作业从检查点恢复时位点来自状态而不是启动参数,顺带把启动模式改掉通常不会按预期生效,改参数前先确认作业是否走状态恢复。
切换启动模式往往意味着「重新取数」,切换前先确认下游能否承受一次全量重放:如果下游是按分区覆盖写入,重放相对安全;如果是累加型指标,重放会让数值翻倍,必须先清理目标分区。

易错点

  • 有状态恢复时顺带改了启动模式,参数被忽略,行为与预期不符
  • specific-offset 只给文件名没给偏移,作业启动直接失败
  • 用 latest-offset 上线却指望有历史数据,下游口径只能从上线当天开始
  • 误以为 earliest-offset 能拿到全部历史,忽略保留期边界,对账时才发现缺口

数据来源与参考

  • Flink CDC 官方文档(Startup Reading Position)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌