一句话定义
变更数据捕获(Change Data Capture,CDC)是一种把数据库里每一次插入、更新、删除操作,按发生顺序实时抓取出来、变成下游可订阅数据流的技术。
原理:数据库其实一直在写“日记”
成熟数据库在提交写入前,都会先记一份日志(不同产品叫法不同,比如 redo log、WAL、binlog),本意是给崩溃恢复和主从复制用。CDC 工具就像一个只读这份日志的订户,按顺序把已提交事务读出来,解析成结构化事件——哪张表、哪一列、旧值、新值、什么时间——再推给消息队列、数据湖或向量库。
打个生活化的比方:过去是每天打烊后盘点一次全店库存,也就是每晚跑一遍全量批处理(ETL,Extract-Transform-Load)。可白天卖掉的货、退回来的货、改过的价签,都要等盘点那一刻才被看见。CDC 相当于在收银台装了一台小票机:每发生一笔改动就立刻打一张小票,下游按顺序实时领取。
其他流派也有:基于触发器(trigger)要在业务表上加逻辑,写放大明显;定时轮询时间戳字段实现简单,但识别不了删除、也有延迟。生产环境通常优先选日志方案。
和相邻概念的区别
| 维度 | 每晚全量重跑 | 定时增量查询 | CDC |
|---|---|---|---|
| 延迟 | 小时到天 | 分钟级 | 秒级甚至更低 |
| 源库压力 | 高 | 中 | 低(只读日志) |
| 删除事件 | 靠对比推断 | 常常漏掉 | 完整捕获 |
| 工程复杂度 | 低 | 低 | 中高 |
CDC 常被和消息队列混为一谈:Kafka 这类系统负责“运”,CDC 负责“取”,两者经常搭配使用,但不是同一件事。它也和主从复制读同一份日志,区别在目的——复制要的是副本一致,CDC 要的是把变更喂给分析、搜索和机器学习系统。
对做 AI 意味着什么
- 特征实时化:用户刚下单、刚退款,特征表秒级更新,模型打分不基于昨天的画像。
- RAG 知识库保鲜:工单、商品、订单改了,检索索引跟着改,不必等次日重建。
- 训练样本回流:线上请求日志和真实标签实时落进样本表,特征与标签天然对齐。
- 口径统一:报表、看板、特征、模型用的是同一份“刚刚发生的事”,少一些口径打架。
需要注意:CDC 一般只保证同一主键上的顺序,schema 变更、去重与一致性语义、初始全量快照与增量切换如何衔接,各家工具和数据库支持程度不同,具体以官方页面为准。
