CDC介绍、常见CDC对比

CDC 介绍

CDC 的全称是 Change Data Capture

在广义的概念上,只要是能 捕获数据变更 的技术,都可以称为 CDC 。

目前通常描述的 CDC,捕获数据库中数据变更,将这些变更发送到 消息中间件、数据库中

应用场景

  • 数据同步:用于备份,容灾;

  • 数据分发:一个数据源分发给多个下游系统;

  • 数据采集:面向数据仓库 / 数据湖的 ETL 数据集成,是非常重要的数据源。

分类

CDC 的技术方案非常多,目前业界主流的实现机制可以分为两种:

基于查询的 CDC

离线调度查询作业,批处理。把一张表同步到其他系统,每次通过查询去获取表中最新的数据;
无法保障数据一致性,查的过程中有可能数据已经发生了多次变更;
不保障实时性,基于离线调度存在天然的延迟。

基于日志的 CDC

实时消费日志,流处理,例如 MySQL 的 binlog 日志完整记录了数据库中的变更,可以把 binlog 文件当作流的数据源;
保障数据一致性,因为 binlog 文件包含了所有历史变更明细;
保障实时性,因为类似 binlog 的日志文件是可以流式消费的,提供的是实时数据。

常见开源 CDC 对比

比较维度 Flink CDC DataX Canal Sqoop Maxwell
增量同步 支持 (基于日志) 不支持 (仅支持模拟,如加时间戳) 支持 (核心功能) 不支持 (仅支持模拟) 支持 (核心功能)
断点续传 支持 (基于Checkpoint) 不支持 (需依赖外部调度) 支持 (记录位点) 不支持 支持 (记录位点)
全量同步 支持 (无锁并行) 支持 (擅长离线批量) 不支持 (通常需配合其他工具) 支持 (核心功能) 不支持
全量+增量 支持 (一体化无缝切换) 不支持 不支持 (需手动拼接) 不支持 不支持
架构模式 分布式 (基于Flink集群) 单机 (多线程) 单机/集群 (通常作为独立服务) 单机 (MapReduce任务) 单机 (独立进程)
核心生态 Apache Flink (流计算) 阿里开源 (插件化) 阿里开源 (模拟Slave) Apache Hadoop (MapReduce) MySQL Binlog解析
维护状态 活跃 (Apache孵化项目) 活跃 (社区维护) 活跃 (但逐渐被Flink CDC取代) 维护 (功能已稳定,更新较少) 维护 (功能稳定,更新较少)

对比增量同步能力

  • 基于日志的方式,可以很好的做到增量同步;
  • 而基于查询的方式是很难做到增量同步的。

对比全量同步能力

基于查询或者日志的 CDC 方案基本都支持,除了 Canal。

对比全量 + 增量同步的能力

只有 Maxwell、Flink CDC、Debezium、Oracle Goldengate 支持较好。

架构对比

在大数据 分布式系统中, Flink CDC 可以很好的将数据存储到分布式的系统,如 Hive、HDFS、Iceberg、Hudi 等

对比 数据转换 / 数据清洗

  • 在 Flink CDC 上操作相当简单,可以通过 Flink SQL 去操作这些数据;
  • 但是像 DataX、Debezium 等则需要通过脚本或者模板去做,所以用户的使用门槛会比较高。

生态方面

Flink CDC 下游有丰富的 Connector,例如将数据写入到 TiDB、MySQL、Pg、HBase、Kafka、ClickHouse 等常见的一些系统,也支持各种自定义 connector。

参考:
https://mp.weixin.qq.com/s?__biz=MzU3Mzg4OTMyNQ%3D%3D&mid=2247493214&idx=1&sn=5c1add3c2ea15f300d8afca522bd77a0&scene=45#wechat_redirect

https://blog.csdn.net/qq_46045632/article/details/122310689


原文出处:/show_1IX3V4BvvXBf.html