CDC:change data capture,变更数据捕获
Canal
阿里开源(GitHub,29.7K Star,7.6K Fork)、Java语言开发、MySQL binlog增量订阅和消费组件。
基于数据库增量日志解析,提供增量数据订阅&消费。
原理:
- Canal模拟MySQL slave的交互协议,伪装为MySQL slave,向MySQL master发送
dump协议 - MySQL master收到dump请求,推送Binary Log给slave,即Canal
- Canal解析Binary Log对象,原始为Byte流

流程

EventParser过程:
- Connection获取上一次解析成功的位置(第一次启动,则获取初始位置或当前数据库的binlog位点)
- Connection建立连接,发送BINLOG_DUMP命令
- MySQL开始推送Binary Log
- 接收到的Binary Log通过Binlog parser进行协议解析,补充一些特定信息
- 传递给EventSink模块进行数据存储,是一个阻塞操作,直到存储成功
- 存储成功后,定时记录Binary Log位置

- 数据过滤:支持通配符的过滤模式,表名,字段内容等
- 数据路由/分发:解决
1:n,1个parser对应多个store的模式 - 数据归并:解决
n:1,多个parser对应1个store - 数据加工:在进入store之前进行额外的处理,如join
Maxwell
官网即官方文档,开源(GitHub,4.3K Star,1K Fork)MySQL的CDC(变更数据捕获)工具,更轻量更简单的Canal、debezium等项目替代品,可读取MySQL二进制日志,并将数据变更以JSON格式发布到Kafka等MQ平台,适用于多种场景,如ETL处理、审计日志记录、缓存管理、搜索索引构建和服务间通信等;支持在命令行中使用,也提供Docker容器方式启动。
工作原理

Databus
领英开源(GitHub,3.7K Star,738 Fork)、Java编写、源无关、分布式低延迟CDC系统,已成为LinkedIn数据处理管道不可或缺的一部分。Databus解决可靠捕获,流动和处理主要数据更改的基本要求。代码库已无人维护,最后一次提交停留在20年5月7日。
功能:
- 源与消费者之间的隔离
- 保证按顺序和至少一次交付具有高可用性
- 从更改流中的任意时间点开始消耗,包括整个数据的完全引导功能。
- 分区消费
- 源一致性保存
DTS
数据传输服务,Data Transmission Service,阿里云提供的一种支持 RDBMS、NoSQL、OLAP 等多种数据源之间数据交互的数据流服务。DTS提供数据迁移、实时数据订阅及数据实时同步等多种数据传输能力,可实现不停服数据迁移、数据异地灾备、异地多活(单元化)、跨境数据同步、实时数据仓库、查询报表分流、缓存更新、异步消息通知等多种业务应用场景,助您构建高安全、可扩展、高可用的数据架构。
优势:DTS 支持 RDBMS、NoSQL、OLAP 等多种数据源间的数据传输。提供数据迁移、实时数据订阅及数据实时同步等多种数据传输方式。相对于第三方数据流工具,数据传输服务 DTS 提供更丰富多样、高性能、高安全可靠的传输链路,同时它提供了诸多便利功能,极大地方便传输链路的创建及管理。
免去部署维护的昂贵使用成本。DTS针对阿里云RDS、DRDS等产品进行适配,解决Binlog日志回收,主备切换、VPC网络切换等场景下的订阅高可用问题。出于稳定性、性能及成本的考虑,推荐使用。
DBSyncer
简称dbs,一款开源(GitHub,934 Star,150 Fork;代码同步托管于Gitee)的数据同步中间件,提供MySQL、Oracle、SQL Server、PG、ES、Kafka、File、SQL等同步场景。支持上传插件自定义同步转换业务,提供监控全量和增量数据统计图、应用性能预警等。
缺点
- 单机版的数据同步中间件
- 数据持久化也是单机文件存储
- CDC方式试下是定时任务短时间扫描拉取Binlog解析同步实现
- 不具备分布式大型数据集成同步处理的能力
实战
基于Docker快速体验部署:
bash
docker run -d \
--name dbsyncer \
-p 18686:18686 \
-e TZ=Asia/Shanghai \
-v /data/dbsyncer/app:/app \
crazylife/dbsyncer-web:latest
浏览器打开http://localhost:18686,用户名密码,都是admin/admin
MongoShake
阿里Nosql团队开源(GitHub,1.1K Star,277 Fork)Go编写、通用型数据同步平台,主要用于MongoDB的数据同步到Kafka或其他MongoDB数据库,通过读取MongoDB集群的Oplog操作日志,对MongoDB的数据进行复制,后续通过操作日志实现特定需求。通过操作日志,提供日志数据订阅消费PUB/SUB功能,可通过SDK、Kafka、MetaQ等方式灵活对接以适应不同场景(如日志订阅、数据中心同步、Cache异步淘汰等)。集群数据同步是其中核心应用场景,通过抓取oplog后进行回放达到同步目的,实现灾备和多活的业务场景。