标准回答
CDC 是什么
CDC(变更数据捕获)指持续捕获源数据库的数据变更并以事件流形式向下游传递,每条变更通常含操作类型(增/改/删)、变更前后镜像与时间戳/位点。它让下游无需周期性全表扫描即可获得最新数据。
实现方式
主流是基于日志的 CDC:直接读取数据库事务日志(MySQL binlog、PostgreSQL WAL、Oracle redo log),对源库侵入小、延迟低、能捕获删除。其他方式如基于时间戳/触发器查询,侵入性强、漏删除,已较少用。常见工具链是 Debezium 把 binlog 转成变更事件写入 Kafka,下游 Flink/Spark 消费。
应用场景
CDC 广泛用于:异构数据库实时同步、数仓/湖仓的增量 ETL 与 upsert(避免每日全量)、缓存与搜索引擎(ES)的实时更新、微服务间数据复制。相比全量同步,它只传增量、延迟低、对源库压力小,是实时数据管道的基石。
常见误区
⚠️ 常见踩坑
日志型 CDC 才能可靠捕获 DELETE 与变更前镜像;基于查询时间戳的方式会漏掉删除。还要处理好初始全量快照与增量衔接、位点持久化,否则重启会丢数据或重复。
追问
追问 1:CDC 如何保证不丢不重(一致性)?
下游需记录消费位点(binlog offset / LSN)并与处理结果一起做幂等或事务提交:故障重启从上次位点重放即可至少一次,配合主键 upsert 或事务 Sink 达到精确一次效果。初始快照与增量切换点要对齐,避免空洞或重复。
追问 2:CDC 数据写入湖仓为什么常用 Hudi/Iceberg?
CDC 产生大量 upsert 与 delete,普通追加表难以处理行级更新。Hudi/Iceberg/Delta 支持行级 upsert/delete、ACID 与小文件合并,能高效地把变更流落地为可查询的最新快照,Hudi 的 MOR 表尤其适合高频更新场景。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
🛠️ AI 工具
- debezium
开源变更数据捕获(CDC)平台,支持多种数据库的实时数据变更流。可与 Apache Kafka 无缝集成,将数据库变更转化为事件流,适用于 AI 数据管道和实时数据同步场景。12.7K+ stars。