首页/数据/数据工程与 ETL 速查/全量与增量衔接方案
CDC 与同步53 条

全量与增量衔接方案

开荒同步的关键是全量与增量的衔接点:常见方案有停写窗口、锁表拿位点、从库做快照,以及工具内置的“快照 + 位点衔接”(Debezium initial 快照、Flink CDC 增量快照)。自研方案必须固定位点在前、全量导出在后,再从该位点追平。

全量与增量的衔接点

开荒同步的关键是衔接点:全量数据必须在某一个确定的位点上「冻结」,之后的变更再通过增量补齐。常见方案有停写窗口、锁表拿位点、从库做快照,以及工具内置的「快照加位点衔接」(Debezium 的 initial 快照、Flink CDC 的增量快照)。自研方案必须固定位点在前、全量导出在后,再从该位点追平到当前。

基本信息

停写窗口实现简单,但对业务有影响,需要审批
锁表方案FTWRL 阻塞写入,仅适合可停写场景
从库快照主库压力大时优先考虑
工具内置如 Debezium initial 快照、Flink CDC 增量快照,减少自研风险

典型使用场景

  • 新链路开荒:为存量数据做一次快照并接上增量
  • 链路重建:位点丢失后重新初始化
  • 大表迁移:分批快照,记录每批对应的位点
  • 流量切换:追平并校验一致后才把下游读流量切过来
  • 演练:定期走一遍全量加增量的流程,确认脚本可用

衔接时序(自研方案)

衔接时序(自研方案)
① 固定位点:记录 File/Pos 或 GTID
② 全量导出:生成快照数据
③ 从固定位点开始消费增量,追平到当前
④ 校验一致后切换下游读流量

衔接方案对照

方案优点代价
停写窗口实现最简单,一致性最好业务需停写,需要审批
锁表方案无需改造业务逻辑阻塞写入,仅适合可停写场景
从库快照卸载主库压力需承担复制延迟,位点仍是主库位点
工具内置衔接由工具保证仍需理解机制与限制
顺序颠倒(先导出后取位点)会永久丢失窗口内的变更,而且通常要等到对账时才发现,届时排查要从头核一遍数据。
追平阶段要同时监控消费速率与位点差距,才能判断什么时候可以切流量;没有这两个指标,就只能靠感觉猜「应该差不多了」。切换前还要做一次口径校验,确认全量加增量的结果与源端在同一时间点对得上,再放行下游读取。

易错点

  • 全量追赶期间不做限速,回放把目标库 IO 打满,影响在线业务
  • 追平阶段没有消费速率监控,不知道何时可以安全切换流量
  • 先导出后取位点,窗口内的变更永久丢失
  • 分表快照时各表位点不一致,关联查询出现跨表错配

数据来源与参考

  • Debezium 官方文档(initial snapshot 机制)
  • Flink CDC 官方文档(增量快照算法)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌