首页/数据/数仓建模速查/Flink CDC 实时入仓链路
湖仓与引擎63 条

Flink CDC 实时入仓链路

Flink CDC 直连数据库日志(MySQL binlog 等)做实时同步:全量+增量自动衔接,入湖前需处理主键更新与 schema 变更。

数仓建模速查数据更新于 2026-10-13

Flink CDC 是什么

Flink CDC 通过直连数据库的变更日志(MySQL 的 binlog、PostgreSQL 的逻辑复制等)把源库变更实时同步到湖表、消息队列或 OLAP 库。它的两个关键特性是:启动时先做一次全量快照,再无缝切换到增量日志读取,业务方不需要停机或额外摆渡表;变更事件携带操作类型,插入、更新、删除都能被还原到目标表。

基本信息

数据来源binlog、redo log、逻辑复制槽
同步模式全量快照 + 增量日志自动衔接
常见落点湖表、消息队列、OLAP 库
变更类型插入、更新、删除均可捕获
主要难点结构变更处理与延迟监控

典型使用场景

  • 业务库到数仓:替代定时抽数,明细表可以做到分钟级可见
  • 源端物理删除需要感知:CDC 能捕获删除,弥补时间戳增量方式的缺口
  • 对业务库压力敏感:从从库或日志读取,几乎不增加业务查询负担
  • 实时大屏与告警:变更事件直接进入实时链路消费
  • 历史数据初始化:启动时自动做一次全量快照,不必单独写初始化脚本

各环节关注点

环节关注点常见做法
全量阶段大表快照耗时长且占用源库资源调整并发与分片策略,避开业务高峰
增量阶段消费延迟与位点管理监控消费延迟,位点定期存档以便重放
结构变更源表加字段会让同步中断目标表结构同步演进,必要时自动加列
删除处理删除事件如何落到目标表目标表标记删除,或用主键模型覆盖

CDC 入湖

CDC 入湖
CREATE TABLE mysql_orders (
  order_id STRING,
  pay_amt DECIMAL(18,2),
  PRIMARY KEY (order_id) NOT ENFORCED    -- 声明主键,便于下游按主键更新
) WITH (
  'connector' = 'mysql-cdc',
  'hostname' = '10.0.0.10',
  'port' = '3306',
  'database-name' = 'trade',
  'table-name' = 'orders'
);
-- 写入目标表:变更事件按主键在湖表中更新
INSERT INTO ods_mysql_orders SELECT * FROM mysql_orders;
源表加字段后未同步目标表结构,同步任务会因结构不匹配而中断,而且往往几小时后才被发现。上线时应同时配置结构变更监控与任务失败告警。
全量快照阶段读取的是源库当前数据,为降低对业务库的影响,通常把 CDC 任务指向从库,并在快照阶段限制并发;如果源表是大表,还要评估快照窗口是否会与业务高峰重叠。

易错点

  • 源库结构变更未同步目标表:同步任务中断,且常常数小时后才被发现
  • 源库大事务导致 CDC 延迟陡增却无监控:延迟只能靠业务反馈才发现
  • 日志保留期短于消费位点:位点过期后只能重做全量,成本高
  • 全量阶段不限并发直连主库:快照把业务库压力拉满,影响线上业务
  • 删除事件不处理:源端已删除的行在目标表里永久保留,指标持续偏大

数据来源与参考

  • Flink CDC 官方文档:MySQL CDC Connector
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌