ETL、ELT、CDC傻傻分不清?一文读懂数据同步三大模式
一、为什么这三个概念总让人迷糊
去年我在一次企业数字化改造项目的评审会上,听到一个架构师说:「我们要用CDC把所有历史数据迁移到数仓」——这句话本身没有问题,但他对CDC的理解是"全量拷贝",而CDC本质上是捕捉增量变更的,用它做历史全量迁移其实是错配场景。
ETL、ELT、CDC这三者的名字都带着"数据搬运"的意味,但它们解决的是不同阶段、不同维度的问题。搞混它们,轻则多花钱,重则上线后系统跑不动。
2026年,随着云数仓普及和实时业务需求激增,这三种模式的选型已经不是"哪个更先进"的问题,而是"你的场景需要哪一个"的工程判断题。
ETLCloud可视化数据管道设计界面,支持ETL/ELT/CDC多种集成模式
二、三大模式的本质是什么
ETL—Extract·Transform·Load
执行顺序:先抽取→在中间层转换→再加载到目标
转换发生在哪:数据仓库之外的独立服务器(ETL服务器)
核心特点:数据到达目标前已经是"干净的"结构化数据
典型工具:Kettle/DataX/Informatica/ETLCloud
大规模历史数据迁移 报表型数仓 T+1批量调度
ELT—Extract·Load·Transform
执行顺序:先抽取→直接加载到目标→在目标内转换
转换发生在哪:云数仓内部(BigQuery/Snowflake/ClickHouse)
核心特点:利用云数仓强大的计算能力做转换,ETL服务器压力小
典型工具:Airbyte/Fivetran/dbt(配合使用)
云原生数仓 多源原始数据存储 探索性分析
CDC—ChangeDataCapture
执行顺序:监听数据库日志→捕获每一条变更(增/改/删)→实时推送
转换发生在哪:不改变数据,只捕获"变化了什么"
核心特点:毫秒级延迟,不依赖查询,对源库压力极低
典型工具:Debezium/Canal/Maxwell/ETLCloudCDC
实时同步 双库一致性 事件驱动架构
用一句话总结三者的核心差异:
ETL是"先洗菜再下锅",ELT是"先下锅再调味",CDC是"边炒边配送"。
三、三大模式核心差异一览
| 维度 | ETL | ELT | CDC |
|---|---|---|---|
| 同步延迟 | 分钟~小时(批量) | 分钟~小时(批量) | 毫秒~秒级(实时) |
| 数据量 | 大批量全量/增量 | 大批量全量原始数据 | 增量变更,量极小 |
| 源库压力 | 中等(SQL查询) | 中等(SQL查询) | 极低(读日志) |
| 转换复杂度 | 高(中间层处理) | 中(目标侧SQL) | 低(只传变更) |
| 技术门槛 | 中(ETL工具) | 中(SQL+dbt) | 较高(需懂DB日志) |
| 适合场景 | 报表、历史迁移、离线仓 | 云数仓、数据湖 | 实时风控、双写同步、微服务 |
| 代表工具 | Kettle、DataX、ETLCloud | Airbyte、Fivetran、dbt | Debezium、Canal、ETLCloudCDC |
四、选哪种?四步判断法
面对一个具体的数据集成需求,我通常用以下四个问题来快速定位模式:
1.业务对延迟的容忍度是多少?
如果「明天早上跑完」就够用→ETL或ELT都行;如果「超过5秒就会影响业务」→必须用CDC。
2.源数据库能承受SELECT查询压力吗?
如果是核心交易库、不能有额外负载→选CDC(读Binlog,压力极小);否则ETL增量SELECT也可以。
3.目标侧是云数仓还是自建数仓?
目标是Snowflake/BigQuery/ClickHouse等有强大SQL计算能力的平台→ELT更省力;目标是传统数仓/自建MySQL→ETL更成熟。
4.是全量历史迁移还是持续同步?
一次性历史数据迁移→ETL;持续增量同步(要捕获增/改/删)→CDC;初始全量+后续实时→通常是 ETL做全量快照+CDC接管增量(最常见的生产架构)。
ETLCloudCDC配置页面:支持MySQL/Oracle/PostgreSQL等主流数据库的日志监听,延迟≤500ms
五、新手最容易踩的三个坑
误区一:CDC可以替代ETL做全量历史迁移
CDC捕获的是「从现在开始的变更」,它不知道历史数据是什么。用CDC做历史迁移,你只能得到一张空表然后慢慢积累变更——通常需要先用ETL做一次全量快照,再用CDC接管后续增量。
误区二:ELT等于ETL的升级版,以后都该用ELT
ELT的前提是「目标侧计算能力强且便宜」。如果你的目标是自建MySQL或传统数仓,把几亿行原始数据直接Load进去再转换,反而会把目标库压垮。ELT是云数仓时代的产物,依赖目标侧的计算资源,换场景未必适合。
误区三:实时就一定比批量好,一步到位上CDC
实时同步的运维成本显著高于批量:需要持续监控Binlog、处理网络抖动、设计幂等消费逻辑……如果你的报表只要「每天刷新一次」,用ETL批量作业在凌晨跑完,成本更低、更稳定。实时是为了解决实时业务问题,而不是追求技术先进性。
六、一个典型的混合架构案例
某连锁零售企业(350家门店)的数据集成诉求:
每天早上6点,财务系统要看到昨天全国门店的销售汇总报表(T+1)
促销期间,库存变化需要在3秒内同步到电商平台(防止超卖)
运营BI团队需要随时能跑历史数据探索分析
最终落地方案:
ETL(批量):每天00:30从门店POS系统全量抽取销售数据,清洗后写入ClickHouse数仓,财务报表6:00准时可用
CDC(实时):监听WMS库存库的Binlog,库存变更500ms内同步到电商中间库,彻底消灭超卖
ELT(探索):原始日志直接Load进ClickHouse,BI用SQL自助分析,数据工程师不用每次手工写ETL
三种模式同时在一套系统里运行,互不干扰,各解决各的问题——这才是真实企业的数据集成现状。
一体化数据集成平台同时支持ETL批量、CDC实时、ELT探索三种模式,减少工具碎片化
ETLCloud在这个案例中承担了ETL批量调度和CDC实时同步两个角色,单平台避免了维护多套工具的运维负担。其CDC模块支持MySQL、Oracle、PostgreSQL、SQLServer的Binlog/LogMiner/WAL监听,同步延迟控制在500ms以内;ETL模块内置100+数据源连接器,批量任务通过可视化拖拉拽配置,无需写代码。