适用对象:数据平台负责人、数据工程师、应用架构师 你将获得:CDC 方法对比、低源负载与低延迟的设计要点、生产级回放/追平/对账与观测清单,可直接用于评估与实施。
速读摘要
目标:把“数据采集”从“搬运数据”升级为可预测的、低源负载、低延迟的变更传递机制。
路线选择:
轮询(Polling)适合低频、非关键场景;
触发器(Trigger)延迟低但侵入性强;
日志解析 CDC(Log-based CDC)在生产实时场景中更稳妥:对源负载小、保留事务序、便于回放与追平。
落地关键:位点管理、顺序与幂等、模式演进、追平/回放、对账校验、背压与节流、端到端可观测性。
与 ODH/IVM 的关系:CDC 解决“把变更拿出来”,ODH 负责“统一域模型”,IVM 负责“读优化服务化”。三者串起来,才能把“采集”变成可消费的实时数据服务。
1. CDC 是什么,以及它“不是什么”
CDC(Change Data Capture):捕获数据在源系统里的插入/更新/删除等变更事件,并以顺序、去重、可回放的方式交付给下游(平台、数仓/湖、API、消息流等)。
它不是:
简单的批量导出/导入(那是 ETL/ELT 的全量装载部分);
万能的“数据同步”口令——CDC 只负责“变更传递”,不等于完成了建模、治理与服务化。
设计理念:把 CDC 当作“低源负载的变更事件公交车”,而不是“求快求全的全量快递员”。
2. 三种常见采集路线:取舍与边界
2.1 轮询(Query/Polling)
做法:按时间戳/版本号定期查询差异。
优点:易实现,对源系统改动小。
典型风险:
延迟随轮训周期放大;
高并发时对源库压力大(频繁全表/索引扫描);
乱序与漏数需要额外对账与补偿。
适用:低频报表、非关键场景、过渡期补救。
2.2 触发器(DB Trigger)
做法:在表上安装触发器,把变更写入日志表或中间表。
优点:延迟较低,易于理解。
典型风险:
侵入业务事务路径,影响写入性能与可维护性;
升级/模式变更时容易“忘记同步改触发器”,引发故障;
跨表/跨事务一致性与顺序管理复杂。
适用:老旧系统、无法读取日志的少数场景;建议只做战术补位。
2.3 日志解析 CDC(Log-based CDC)
做法:解析数据库事务日志(如 redo/transaction log),按事务顺序输出变更事件。
优点:
低源负载:对线上查询/写入影响小;
顺序与一致性:保留事务边界,便于下游重放与对账;
回放追平:支持断点续传与历史位点重放;
演进友好:更易处理列新增/重命名等模式演进。
典型考虑:位点持久化、安全/权限、日志保留策略、异常日志段处理。
适用:绝大多数生产级实时数据采集。
决策建议:核心链路优先 Log-based CDC;轮询/触发器作为补救与特例。
3. 端到端延迟:从哪里来、如何控
将端到端延迟分解为可管理的组件:
1. 源系统提交 → 日志可见:与数据库提交与日志刷盘相关;
2. 日志读取与解析:解析吞吐、批量大小、解析线程;
3. 网络传输:跨网/跨区域的带宽与稳定性;
4. 平台处理:变更路由、轻度转换、幂等去重;
5. 落库/服务化:写入 ODH、IVM 刷新或向 API/消息/OLAP 下游交付。
优化策略:
在解析侧控制批量与并发,兼顾追平速度与下游背压;
在平台侧做小步快跑的增量聚合,避免重型转换阻塞变更通道;
针对下游不同消费形态设置独立队列与节流策略(API/消息/OLAP 差异化);
用追平(catch-up)与窗口重放(replay)保证低峰期快速追赶,同时不压垮下游。
4. 顺序、幂等与去重:生产稳定的三要素
顺序(Ordering):
按主键/分片键维持事件顺序;
事务边界内的事件不可乱序;
跨表事务(如订单头/行)需在 ODH 层做一致性补偿策略。
幂等(Idempotency):
事件携带版本号/LSN/位点;
下游以“最后写入 wins”或显式版本比较避免重复应用。
去重(De-dup):
以事件 ID + 位点为主;
宕机恢复后以“位点前滚 + 去重缓存”防止重复侧写。
实战要点:把位点(offset/LSN)作为首要对象纳入治理:持久化、可查询、可告警。
5. 模式演进(Schema Evolution):让模式变更可预期、可演练
常见变更:新增列、重命名列、类型变更、主键/唯一键调整、软删(新增状态位)。
处理策略:
新增列:下游默认 null/默认值,IVM/API 面向消费者做向后兼容;
重命名列:提供映射表/别名层,双写过渡一段时间再切换;
类型变更:建立显式转换规则与失败兜底;
主键调整:以“影子键”过渡,完成数据回填后再切换真实主键;
软删:统一采用“状态+时间戳”的策略,避免物理删除导致的回放歧义。
治理建议:把Schema 变更评审与灰度演练纳入变更流程;所有消费者(IVM/API/OLAP)都要订阅到“模式公告”。
6. 追平与回放:把恢复变成常规操作
追平(Catch-up):在低峰期提高解析批量与并发,使位点快速追近最新提交。
窗口回放(Replay):针对已知问题区间做区段重放,需配合幂等与去重。
断点续传:位点与消费确认持久化,重启后从最近确认点继续;
多下游隔离:不同下游拥有各自消费位点,避免相互牵连。
演练建议:把“追平/回放/回退”纳入例行演练清单,发布前至少演练一次。
7. 对账与校验:让结果可被证明
目标:证明“CDC 之后的数据 == 源系统在某时刻的真实状态(在一致性模型内)”。
方法组合:
行/字段级抽样比对:定时抽样校验关键表与关键字段;
窗口对账:以时间窗口/LSN 范围比对事件数量与聚合指标;
双写一致性校验:迁移切换期间,对新旧链路做并行比对;
差异告警与自愈:发现差异后触发局部回放或修复任务。
度量建议:暴露“差异率、重放次数、落后位点、窗口延迟”等指标到监控系统。
8. 背压、节流与容量规划
背压(Backpressure):当下游处理能力不足时,CDC 通道应当能可控减速,而不是丢弃或无限排队。
节流(Throttle):面向 API/消息/OLAP 各自设定速率上限与并发阈值;
容量规划:基于平均/峰值写入率、事件大小、历史保留、回放窗口来估算解析吞吐与存储开销。
实践技巧:把“一条链路拆成多条”(按域/表/业务优先级)与“一条链路分多档速率”,避免“大而全一条线被拖慢”。
9. 安全、合规与跨网传输
最小权限:只授予读取日志所必需的权限;
字段级脱敏:在 ODH/IVM 层按角色/场景输出;
访问审计:CDC 读取、平台处理与消费调用均需留痕;
跨网/跨区:利用专线/网闸/传输加密,必要时分层汇聚后再对外分发;
合规要求:等保/分级、国密算法与密钥管理按地域规范执行。
10. 与 ODH/IVM 的协同:让变更“可消费”
ODH(Operational Data Hub):在平台中做主数据对齐与域模型标准化,把“表”提升为“业务域”(客户、订单、商品、库存、设备等)。
IVM(增量物化视图):按消费模式增量刷新读优化视图,服务于API/消息/OLAP/缓存等不同读路径。
收益:
下游不必各自重复建模/清洗;
能以“域 API/事件”复用数据资产;
读路径延迟可控且更稳定。
延伸阅读:《数据采集:从 CDC 到实时数据服务的完整指南》(/data-acquisition/)
11. 生产落地清单(可直接用于 RFP/实施)
必备能力
1. 日志解析 CDC(多源覆盖,含主流国产数据库)
2. 位点管理(持久化、查询、告警、可视化)
3. 顺序/幂等/去重机制(按主键/分片键)
4. 追平/回放/断点续传(多下游隔离位点)
5. 模式演进支持(新增/重命名/类型变更)
6. 对账校验(抽样、窗口、双写一致性)
7. 背压/节流(多读路径差异化限速)
8. 可观测性(延迟、落后位点、错误率、重放次数等)
9. 安全与合规(最小权限、脱敏、审计、跨网策略)
10. 面向消费的交付(ODH/IVM、API、消息、OLAP、缓存)
上线步骤(建议模板)
1. 选定 1–2 条关键链路做 PoC:明确延迟与一致性目标;
2. 建立位点与监控面板:先“看见”,再“提速”;
3. 完成全量初始化:并与增量切换窗口对齐;
4. 打通 ODH 域模型与 IVM:让消费侧先吃到“读优化小视图”;
5. 演练:追平/回放/回退 + 对账;
6. 灰度切换:双写并行,达成一致性阈值后收敛旧链路;
7. 稳定运行:容量复盘与阈值固化,纳入变更流程。
12. 常见误区与反模式
把 CDC 当成“万能同步”:忽略 ODH/IVM,导致下游重复造管道;
单管道承载所有表:任何一个慢消费者都拖慢全局;
位点仅存在进程内存:重启后错位/重复,难以对账;
无追平策略:日积月累的延迟在高峰期被放大;
无 Schema 公告与演练:一处改表,多处故障。
FAQ
Q1:日志解析 CDC 会不会增加数据库负担?
A:相对轮询/触发器,日志解析 CDC 对线上查询/写入影响更小;同时配合日志保留策略与位点追踪,避免回放期长时间反复读取。
Q2:多下游如何保证互不影响?
A:为每个下游维护独立消费位点与限速策略,必要时拆分为多条链路,分域/分优先级治理。
Q3:怎么衡量“是否稳定”?
A:以“窗口延迟、位点落后、重放次数、差异率”为核心指标,稳定在阈值内并可追踪波动原因。
Q4:是否需要配合消息中间件?
A:视场景而定。CDC→ODH/IVM 后,既可直连 API/OLAP,也可与 Kafka 等中间件配合做大规模分发。
Q5:如何开始不会“动大手术”?
A:先从 1–2 条关键链路做 PoC → 建立位点与监控 → 完成初始化与增量切换 → 灰度上线。过程无需停机,可回退。
>>> 预约演示
>>> 申请试用