先说一个反常识的结论:企业做 CDC(Change Data Capture,变更数据捕获),真正决定成败的往往不是"能不能抓到变更",而是"抓到的变更能不能被可靠地处理、校验、监控,并在出问题时快速定位"。很多团队把 CDC 理解成"装一个 Debezium 或者用数据库日志解析工具就完事",结果上线之后才发现,变更数据量一大、源库一多、链路一复杂,采集只是整个链条里最不起眼的一环,后面的处理、质量、监控才是真正吃人的地方。
企业级 CDC 平台参考架构:FineDataLink 5.0 从采集到质量监控的完整链路
我在多个数据集成项目里反复验证过这个判断。这篇文章以一个企业级 CDC 平台的参考架构为主线,把从采集到质量监控的完整链路拆开讲清楚,重点落在 FineDataLink 5.0 这套体系上,给正在规划 CDC 能力的企业一个可参照的落地框架。
为什么 CDC 这件事值得单独写一篇文章来谈架构?因为 CDC 正在从一项小众的数据库技术,变成企业数据底座里的标准组件。业务系统之间的实时数据同步、数仓的实时增量入仓、下游分析场景的实时供数,背后都依赖 CDC。过去这些需求靠定时批量抽取勉强应付,但随着业务对数据时效性的要求不断提高,CDC 从可选项变成了必选项。而 CDC 一旦成为必选项,架构设计的重要性就凸显出来了——一个设计得当的 CDC 平台能稳定运行多年,一个仓促搭建的 CDC 方案则会成为运维的噩梦。
一、先厘清 CDC 的三种实现路线
在谈架构之前,先厘清一个基础问题:CDC 到底有几种实现方式,各自适合什么场景。很多选型纠结,根源在于没搞清楚这一点。
CDC 的实现路线大致有三条。基于时间戳或自增主键的轮询,是最朴素的方式,通过定时查询源表里变化的数据来识别变更。它的优点是简单、对源库无侵入,缺点是只能捕获新增和部分更新,无法捕获删除,且实时性受轮询频率限制,对源库有额外的查询压力。
基于触发器的捕获,是在源表上建触发器,把变更写入一张变更日志表。它能捕获增删改,但会侵入源库,对源库性能有影响,维护成本也高,现在用得越来越少。
基于数据库日志的解析,是当前主流的 CDC 方式,通过读取数据库的 redo log、binlog、WAL 等日志文件,解析出数据变更。它零侵入、实时性高、能捕获完整的增删改,但实现复杂度高,对数据库类型和版本有依赖。
FineDataLink 的数据管道能力采用的就是基于日志解析的 CDC 方式,通过监听源库日志变化实现零侵入式实时同步。下面这张表把三条路线做个对照。
| 实现路线 | 实时性 | 侵入性 | 能否捕获删除 | 适用场景 |
|---|---|---|---|---|
| 时间戳/自增主键轮询 | 低,受轮询频率限制 | 无侵入 | 不能 | 简单增量抽取、对实时性要求不高的场景 |
| 触发器捕获 | 高 | 侵入源库 | 能 | 老数据库、无日志解析能力的场景 |
| 日志解析 | 高,毫秒级 | 零侵入 | 能 | 主流关系型数据库的实时同步 |
三条路线里,基于日志解析的 CDC 之所以成为主流,是因为它在实时性、侵入性、完整性三个维度上取得了最好的平衡。但它的代价是实现复杂度高,尤其是面对多种数据库类型时,每种数据库的日志格式、解析方式、位点机制都不同,需要逐一适配。这也是为什么企业级 CDC 平台的价值,很大程度体现在对多种数据源尤其是信创数据源的统一适配能力上。
二、企业级 CDC 平台的参考架构
一个企业级 CDC 平台,不能只有采集这一个环节。完整的参考架构应该覆盖采集、处理、传输、落库、质量监控五个层次,每一层都有明确的职责和边界。
在展开五层架构之前,先说明一个设计原则:这五层在逻辑上是分层的,但在工程实现上不一定要拆成五个独立的组件。企业级平台的价值之一,就是把这五层整合到同一套体系里,让它们协同工作,而不是像自建方案那样,采集用 Debezium、传输用 Kafka、落库自研、监控靠人工,组件之间割裂,出了问题要跨系统排查。理解这个原则,才能明白为什么下面要强调"同一套体系"。
最底层是采集层,负责从源数据库捕获变更。FineDataLink 的 CDC 输入支持 MySQL、Oracle、SQL Server、PostgreSQL、OceanBase、GaussDB 等多种数据源,通过日志解析实现零侵入采集。信创适配在这一层尤其重要,因为达梦、KingbaseES、OceanBase、GaussDB 等国产数据库的日志格式各不相同,需要平台做针对性的解析适配。
往上是处理层,负责对捕获到的变更做清洗和转换。变更数据从日志里解析出来是原始的行级变更,往往需要做字段映射、类型转换、脏数据过滤、格式标准化,才能供下游消费。FineDataLink 5.0 提供了丰富的处理算子,包括 JSON 解析、XML 解析、字段设置、新增计算列、数据过滤、值替换、字段拆行拆列、列转行等,覆盖了变更数据清洗和转换的常见需求。
再往上是传输层,负责变更数据的可靠投递。这里的关键是保证变更不丢失、不重复,也就是至少一次或精确一次的投递语义。FineDataLink 的数据管道基于日志解析,支持 Exactly-Once 语义,确保变更数据在传输过程中不丢不重。
落库层负责把处理后的变更写入目标端,可能是数仓、分析库、消息队列,也可能是另一个业务系统。FineDataLink 支持把变更数据输出到关系型数据库、分析型数据库、消息队列等多种目标,满足不同下游的消费需求。
最顶层是质量监控层,负责对整条链路的运行状态和数据质量进行监控。这是很多自建 CDC 方案最容易缺失的一层,但恰恰是决定 CDC 能否长期稳定运行的关键。
这五层架构的价值,在于把 CDC 从一个孤立的采集动作,扩展成一条可治理、可监控、可追溯的完整链路。很多企业做 CDC 失败,不是因为采集技术不行,而是因为只关注了采集这一层,忽略了后面的处理、传输、落库和监控,导致链路脆弱、问题难排查。
三、为什么质量监控层是 CDC 平台的成败关键
单独把质量监控层拿出来讲,是因为它被忽视的程度和它的重要性严重不匹配。
CDC 链路有几个天然的脆弱点。源库日志格式变化、大事务导致的日志膨胀、网络抖动导致的中断、目标库写入失败导致的积压,任何一个问题都可能导致变更数据丢失或延迟,而且这些问题往往在数据已经出错之后才被发现。
自建 CDC 方案通常的做法是,采集用 Debezium,传输用 Kafka,落库自己写消费程序,质量监控则基本靠人工盯日志。一旦链路中断,往往要等下游报表数据对不上,才能反推回 CDC 出了问题。这种事后发现的模式,在数据时效性要求高的场景下是不可接受的。
质量监控层要解决的核心问题,可以拆成三个:链路状态监控、数据质量校验、异常告警。链路状态监控回答"链路还在不在跑、延迟多少",数据质量校验回答"同步过去的数据对不对",异常告警回答"出问题了能不能及时通知到人"。这三个问题缺一不可,任何一个缺失都会让 CDC 的可靠性大打折扣。
FineDataLink 5.0 把质量监控内建到了 CDC 链路里。数据管道任务支持任务监控,可以实时查看同步状态、延迟情况、异常告警。同时,5.0 新增的数据质量模块可以和 CDC 链路联动,在数据流转过程中对变更数据做质量检测,发现问题及时告警。这种把采集、传输、质量监控放在同一套体系里的做法,是自建 CDC 方案难以做到的。
这里要特别强调数据质量校验的价值。CDC 同步的最终目标是源端和目标端数据一致,但链路运行过程中,数据丢失、重复、错乱都可能发生。如果没有定期的数据校验,这些问题可能潜伏很久才被发现,届时已经影响了大量下游数据。FineDataLink 的数据校验能力可以对源端和目标端的数据进行比对,自动识别差异,把潜在的数据不一致问题提前暴露出来。
四、CDC 链路的关键技术细节
CDC 平台要稳定运行,有几个技术细节必须处理好,这些细节在架构设计阶段就要考虑清楚。
首先是断点续传。CDC 链路中断是常态,关键是中断后能不能从断点继续,而不是从头重新同步。基于日志解析的 CDC,通过记录日志位点(如 binlog 位点、LSN)来实现断点续传,中断恢复后从上次的位点继续消费,不丢数据、不重复处理。
第二个是大事务处理。源库的大事务会产生大量的日志变更,如果一次性加载到内存,可能导致内存溢出或长时间阻塞。CDC 平台需要对大事务做拆分或流式处理,避免单个大事务拖垮整条链路。
第三个是 DDL 变更的同步。源表结构变化(加字段、改类型)是 CDC 链路的高频痛点。如果目标端不感知 DDL 变更,就会导致写入失败或数据错乱。企业级 CDC 平台需要支持 DDL 的捕获和同步,或者至少能对 DDL 变更做出明确的告警和人工处理提示。
第四个是数据一致性校验。CDC 同步的最终目标是源端和目标端数据一致。平台需要提供数据校验能力,定期或实时比对源端和目标端的数据,识别同步过程中的数据丢失或错乱。
还有一个值得展开的点是变更数据的顺序性。CDC 采集到的变更必须严格保持事务内的顺序,否则同一行数据的多次变更如果乱序处理,会导致目标端的数据状态错误。基于日志解析的 CDC,天然能保证日志的顺序性,但在并行处理和分布式消费的场景下,需要额外的机制来保证同一主键的变更被顺序处理。这是 CDC 平台在架构上需要特别处理的细节,也是很多自建方案容易踩坑的地方。
FineDataLink 5.0 在这些细节上都有对应的能力。数据管道支持断点续传和实时增量同步,安特威通过它实现了数据源到数仓的实时增量同步,目标库数据 10 秒内即可跟随源库变化。数据校验能力可以对源端和目标端的数据进行比对,自动识别差异。
除了这四个技术细节,还有两个容易被忽略的工程问题。一个是源库的权限和网络配置,CDC 采集需要源库开放日志读取权限,网络要保证采集端到源库的连通性,这些前置条件在架构设计阶段就要和 DBA 沟通清楚。另一个是目标端的写入策略,CDC 的写入是高频的小批量写入,目标端如果是分析型数据库,需要考虑写入的批量合并和去重,避免频繁小写入拖垮目标端性能。这些工程细节虽然不显眼,但处理不好会直接影响 CDC 链路的稳定性和效率。
五、一个完整的落地案例
为了说明这套架构在实际中怎么落地,我讲一个具体的场景。
一家制造企业需要把 ERP 系统的核心业务表实时同步到数仓,供经营分析使用。源库是 Oracle,目标端是数仓,中间需要做字段映射和数据清洗。企业同时有信创替代的计划,后续源库可能切换到 OceanBase 或 GaussDB。
这个案例里,有几个具体的实施细节值得展开。核心业务表有几十张,涉及订单、库存、财务等模块,每天产生的变更量在千万级别。字段映射方面,源库的 Oracle 字段类型和目标端数仓的字段类型存在差异,需要在处理层做类型转换。数据清洗方面,源库里有少量历史遗留的脏数据,需要在同步过程中过滤掉。这些细节决定了 CDC 链路不是简单的"搬数据",而是需要处理层承担实质性的转换和清洗工作。
在实施顺序上,我们建议先做小范围验证。选一两张变更频率适中的表,把采集、处理、传输、落库、监控的完整链路跑通,验证数据一致性后再逐步扩展到全部核心表。这种渐进式的推进方式,能有效控制风险,也便于在早期发现并解决链路中的问题。
按照参考架构,采集层用 FineDataLink 的 CDC 输入对接 Oracle,通过日志解析实现零侵入采集;处理层做字段映射、类型转换和脏数据过滤;传输层由平台保证可靠的变更投递;落库层把处理后的数据写入数仓;质量监控层通过任务监控和数据质量模块,实时监控链路状态和数据质量。
这个方案的关键优势在于,当企业后续把源库从 Oracle 切换到 OceanBase 或 GaussDB 时,CDC 的采集层只需要切换数据源配置,处理层、传输层、落库层、监控层都不需要改动。信创数据源的原生适配,让国产化替代的过渡变得平滑。
再补充一个更贴近实时业务的场景。厦钨新能源通过 FineDataLink 的实时处理能力,把异常数据从被动发现变成主动推送。虽然这个场景的核心是实时处理而非纯 CDC,但它说明了一个道理:CDC 采集到的变更数据,只有和下游的实时处理、预警机制联动,才能真正产生业务价值。孤立的 CDC 采集只是把数据搬了个位置,把变更数据接入实时计算、触发业务动作,才是 CDC 的最终目的。
从这个角度看,CDC 平台的选型不能只看采集能力,还要看它能否和实时计算、离线 ETL、数据质量、任务调度等能力协同。这也是企业级平台相对于单一 CDC 工具的核心优势所在——CDC 不是孤岛,而是企业数据底座的一部分。
六、CDC 平台选型的几个判断标准
结合上面的架构拆解,选型 CDC 平台时可以重点看几个维度。下面这张表把关键判断维度整理出来,选型时可以逐项对照。
| 判断维度 | 需要关注的点 |
|---|---|
| 数据源覆盖 | 是否支持所需的数据库类型,尤其是信创数据源 |
| 采集方式 | 是否基于日志解析、零侵入、实时性如何 |
| 断点续传 | 中断后能否从断点继续,不丢不重 |
| DDL 处理 | 源表结构变更时如何处理 |
| 质量监控 | 是否有任务监控、数据校验、异常告警 |
| 批流一体 | CDC 能否和离线 ETL 在同一平台协同 |
| 运维成本 | 是否需要单独维护 Kafka、Debezium 等组件 |
这几个维度里,数据源覆盖和信创适配是硬门槛,质量监控和批流一体是拉开差距的地方,运维成本则决定了长期持有成本。自建 CDC 方案在灵活性上有优势,但在质量监控和运维成本上往往吃亏,企业需要结合自身团队能力权衡。
最后补充一个经常被问到的判断:CDC 平台要不要和 ETL 工具统一。我的建议是,如果企业同时有离线 ETL 和实时 CDC 的需求,尽量选择能同时覆盖两者的平台。原因在于,离线 ETL 和实时 CDC 在很多场景下是衔接的——CDC 负责实时增量入仓,离线 ETL 负责定期的批量加工和宽表构建,两者共享同一套数据源管理、任务调度和质量监控,能显著降低运维复杂度。如果分别用两套工具,就要维护两套连接配置、两套调度、两套监控,长期成本会明显上升。FineDataLink 5.0 把数据管道(CDC)、离线 ETL、实时计算放在同一套体系里,正是为了解决这个割裂问题。
七、FAQ
在进入 FAQ 之前,先澄清几个关于 CDC 的常见误区,这些误区在选型和实施中经常造成误导。
其一,把 CDC 等同于数据同步。CDC 是数据同步的一种实现技术,但数据同步的范畴更广,还包括全量同步、定时增量同步等。CDC 解决的是实时增量同步的问题,全量同步仍然需要单独的机制来处理。
其二,认为 CDC 可以完全替代 ETL。CDC 负责的是变更数据的捕获和传输,ETL 负责的是数据的抽取、转换、加载和加工。两者是互补关系,CDC 负责把变更数据实时搬过来,ETL 负责把数据加工成业务可用的形态。
其三,低估了 CDC 的运维复杂度。CDC 链路是 7×24 小时运行的,断点续传、大事务、DDL 变更、数据一致性,任何一个问题处理不好都会影响链路的稳定性。选型时如果把 CDC 当成"装个工具就完事",上线后往往会付出远超预期的运维成本。
澄清了这三个误区,再看下面的具体问题。
这里再补充一个实施层面的提醒:CDC 平台上线前,务必做一次完整的链路压测和故障演练。压测要覆盖高变更量场景,确认链路在峰值下不丢数据、不积压;故障演练要模拟源库中断、网络抖动、目标库写入失败等情况,验证断点续传和告警机制是否按预期工作。很多 CDC 项目上线后出问题,根子在于上线前没有做充分的压测和演练,把问题留到了生产环境才暴露。
问:CDC 和普通的定时增量抽取有什么区别?
答:核心区别在实时性和完整性。定时增量抽取靠轮询,实时性受频率限制,且通常无法捕获删除操作。CDC 基于日志解析,实时性可达毫秒级,能捕获完整的增删改,且零侵入源库。对实时性要求高、需要完整变更记录的场景,CDC 是更合适的选择。
问:CDC 会拖慢源库性能吗?
答:基于日志解析的 CDC 是零侵入的,它读取的是数据库的日志文件,不直接查询源表,对源库的影响很小。相比之下,基于触发器的 CDC 会侵入源库,对性能有影响,这也是它逐渐被日志解析方式取代的原因。
问:信创数据库能做 CDC 吗?
答:能。FineDataLink 5.0 对达梦、KingbaseES、OceanBase、GaussDB 等信创数据源做了 CDC 适配,通过解析这些国产数据库的日志实现零侵入实时同步。这一点对正在做国产化替代的企业尤其关键,因为开源 CDC 工具对国产数据库的支持往往不完善。
问:CDC 链路中断了怎么办?
答:企业级 CDC 平台通过断点续传机制处理中断。链路中断后,平台记录日志位点,恢复时从断点继续消费,不丢数据、不重复处理。同时,任务监控会及时告警,让运维人员及时知道链路中断,而不是等下游数据出错才发现。
问:自建 CDC 方案和企业级平台怎么选?
答:看团队能力和长期运维投入。自建方案(Debezium + Kafka + 自研消费)灵活但运维重,需要团队自己解决断点续传、大事务、DDL、质量监控等一系列问题。企业级平台把这些能力内建,开箱即用,代价是接受平台化的产品形态。团队有强流计算能力且愿意长期投入的,可以自建;否则企业级平台更稳妥。
问:CDC 平台需要和 ETL 工具统一吗?
答:建议尽量统一。离线 ETL 和实时 CDC 在很多场景下是衔接的,CDC 负责实时增量入仓,离线 ETL 负责批量加工和宽表构建,两者共享同一套数据源管理、任务调度和质量监控,能显著降低运维复杂度。如果分别用两套工具,就要维护两套连接配置、两套调度、两套监控,长期成本会明显上升。
问:CDC 采集到的数据能直接给业务用吗?
答:通常不能直接给业务用,需要经过清洗、转换、指标加工。CDC 采集到的是原始的行级变更,要经过字段映射、类型转换、脏数据过滤,再结合下游的实时计算或离线加工,才能变成业务可用的数据。这也是为什么 CDC 平台的选型要看它能否和实时计算、离线 ETL 协同,而不是只看采集能力。
免责声明
本文基于公开产品资料和项目经验整理,旨在为 CDC 平台选型和架构设计提供参考。不同企业的数据源类型、数据量、实时性要求存在差异,实际架构方案需结合自身情况评估。文中涉及的产品能力以官方文档为准。CDC 平台的建设是一个持续演进的过程,建议企业在规划阶段就充分考虑数据源覆盖、信创适配、质量监控和批流协同等长期因素,避免只解决眼前需求而留下架构隐患。一个稳健的 CDC 平台,能为企业的实时数据能力打下扎实的底座,让后续的实时分析、实时预警、实时供数等场景有可靠的支撑。希望这篇文章的架构拆解,能帮助正在规划 CDC 能力的企业少走弯路,把有限的精力聚焦在真正影响链路稳定性和数据质量的关键环节上。