一、CDC概述:什么是CDC、为什么需要CDC、CDC的应用场景
1.1 什么是CDC?说白了就是“盯着数据库的变更看”
CDC,全称 Change Data Capture,中文叫“变更数据捕获”。
我习惯这么跟新人解释:CDC 就是给数据库装了一个“监控探头”。它实时盯着数据的变化——哪一行插入了、哪一行更新了、哪一行删除了——然后把变更事件抓出来,推给下游系统。
举个例子。你在电商平台下单,订单表里多了一条记录。传统做法是:下游的报表系统、搜索引擎、缓存系统各自定时去扫表,比如每5分钟跑一次批处理。这叫什么?这叫“轮询”。
轮询的问题很明显:
- 延迟高:5分钟扫一次,数据就落后5分钟。要是1小时扫一次,那基本是“昨日新闻”。
- 浪费资源:每次扫表都要全表扫描或者扫索引,数据库压力大得很。
- 增量难识别:你得自己维护一个时间戳或者版本号,才能知道哪些数据是“新的”。
CDC 的思路完全不同。它不扫表,而是直接从数据库的事务日志(比如 MySQL 的 binlog、PostgreSQL 的 WAL)里读取变更记录。日志里写了什么?写了“事务ID、操作类型、变更前数据、变更后数据”。CDC 把这些解析出来,变成一条条事件流,推给 Kafka、Pulsar 这类消息中间件,或者直接写入目标系统。
一句话总结:CDC = 监听数据库日志 → 解析变更事件 → 实时同步到下游。
1.2 为什么需要CDC?我踩过的坑告诉你
说实话,十年前我做数据同步的时候,根本不知道 CDC 这个词。那时候公司要做数据仓库,每天凌晨跑批处理,把业务库的数据全量拉一遍。结果呢?
- 业务库白天扛不住,DBA 天天找我吵架。
- 数据延迟24小时,业务方说“你们的数据是昨天的,我们没法用”。
- 有一次全量同步跑崩了,数据对不上,我加班三天三夜修数据。
后来我接触到 CDC,才意识到:增量同步才是正道,全量同步只是兜底方案。
为什么需要 CDC?核心原因就三个:
- 低延迟:CDC 能做到秒级甚至毫秒级延迟。你想想看,金融交易、实时风控、库存扣减,这些场景能等5分钟吗?不能。
- 低侵入:CDC 读取的是数据库日志,不需要改业务代码,不需要在表上加触发器,不需要业务方配合。我在项目中见过太多因为加触发器导致数据库性能雪崩的案例——CDC 没这个问题。
- 高可靠性:事务日志是数据库自带的,只要数据库没坏,日志就在。CDC 可以做到“断点续传”——记录下已经读到哪个日志位置,崩了重启接着读,不会丢数据,也不会重复消费。
我的经验:选 CDC 方案时,一定要关注“断点续传”的实现方式。有些开源工具靠内存记录位点,一重启就丢了,那还不如不用。
1.3 CDC的应用场景:不只是数据同步
很多人以为 CDC 就是用来做数据同步的。其实它的应用场景比你想的广得多。我列几个我实际参与过的项目:
| 场景 | 典型需求 | CDC 怎么解决 |
|---|---|---|
| 实时数仓 | 业务库数据实时同步到数仓(如 ClickHouse、Doris) | CDC 捕获 binlog 变更,实时写入数仓,替代 T+1 批处理 |
| 缓存刷新 | 数据库数据变更后,Redis/本地缓存需要同步更新 | CDC 监听变更事件,推送到缓存失效队列或直接更新缓存 |
| 搜索引擎索引 | Elasticsearch 索引需要与数据库保持实时一致 | CDC 将数据库变更转为 ES 的增删改请求,保证搜索数据新鲜 |
| 微服务事件驱动 | 订单创建后,通知库存、物流、支付等微服务 | CDC 将数据库变更作为领域事件,推送到消息队列,解耦服务 |
| 异地多活/灾备 | 主库数据实时同步到异地从库,做读写分离或灾备 | CDC 实现跨机房、跨地域的数据库实时复制 |
| 审计与溯源 | 记录所有数据变更历史,用于合规审计 | CDC 捕获每次变更的“前镜像”和“后镜像”,存入审计表 |
嗯,这里要注意:不是所有场景都适合 CDC。比如你只是每天跑一次报表,延迟几小时无所谓,那用批处理更简单。CDC 有它的运维成本——你得维护一个 CDC 组件,监控它的延迟和健康状态。
我曾经踩过的坑:有一次在线上环境直接开启 CDC 同步,没注意 binlog 格式。MySQL 默认是 STATEMENT 格式,CDC 工具解析不了,导致数据全乱套。后来我才知道,CDC 要求 binlog 必须是 ROW 格式。这个坑,我帮你们踩过了。
1.4 CDC的核心逻辑:一张图看懂
说了这么多,不如直接画张图。下面这张图展示了 CDC 的完整链路:
这张图其实已经把 CDC 的核心链路讲清楚了:
- 左边:业务数据库产生事务日志。
- 中间:CDC Connector 解析日志,提取变更事件。
- 右边:事件进入消息队列,下游消费者按需消费。
你想想看,这个链路里最关键的组件是什么?是 CDC Connector。它决定了你能解析哪些数据库、支持哪些日志格式、性能怎么样、能不能断点续传。后面几章我会详细讲各种 CDC 工具的选型对比,这里先留个悬念。
1.5 小结:CDC 不是什么新鲜事,但很重要
CDC 这个概念其实不新。早些年 Oracle 的 GoldenGate、IBM 的 InfoSphere CDC 就在做这件事。但那时候是商业软件,贵得很,小公司用不起。
这几年开源生态起来了,Canal、Debezium、Maxwell 这些工具让 CDC 变得触手可及。再加上 Kafka 成为消息队列的事实标准,CDC + Kafka 几乎成了实时数据同步的“黄金组合”。
记住三个关键词:
- 日志解析:CDC 的核心技术,不是扫表。
- 实时增量:秒级延迟,替代批处理。
- 事件驱动:数据变更变成事件流,解耦上下游。