背景
1)sqoop 同步的一些不足
- 实时性低
- 增量同步,无法同步物理删除的记录
- 有些表是有修改没有修改时间字段,或者不维护修改时间字段,及时数据量很大也没办法增量同步
- 数据同步时读取数据库产生大量的IO
2)用户越来越渴望实时性的数据
基于数据日志变更的CDC简单对比
目前了解组件有 maxwell、canal、debezium、flinkx (如果还要别的欢迎留言补充)
组件 | Canal | Maxwell | Debezium | Flinx |
---|---|---|---|---|
开源方 | 阿里 | zendesk | redhat | 袋鼠云 |
开发语言 | Java | Java | Java | Java |
支持数据库 | MySQL | MySQL | MongoDB、MySQL、PostgreSQL、SQL Server 、Oracle( 孵化)、DB2( 孵化)、Cassandra( 孵化) | MongoDB、MySQL、PostgreSQL |
是否支持bootstrap | 否 | 是 | 是 | 否 |
是否支持解析DDL同步 | 是 | 是 | 是 | 是 |
是否支持HA | 是 | 需定制 | 基于kafka-connector | 是 |
社区活跃(2020.07.20) | release:2019.09.02,star:14.8k,last-commit:2020.03.13 | release:2020.07.01,star:2.2k,last-commit:2020.07.02 | release:2020.07.16,star:3.4k,last-commit:2020.07.16 | release:2020.07.14,star:1.4k,last-commit:2020.07.17 |
文档 | 中文,百度可以解决 | 英文,官方文档 | 英文,官方文档十分详细 | 中文,github readme 文档 |
MQ集成 | RocketMQ、Kafka | kafka | kafka | Emqx、kafka |
分析
选型考虑的点
- 必须带bootstrap功能
- 可与kafka的集成,集成越简单越好
- 数据源必须支持 MySQL、MongoD、PostgreSQL(项目刚需)
- 项目活跃程度
从支持的数据源来看Canal、Maxwell 数据源支持不足,Debezium和Flinkx都是不错的选择; 但FlinkX 支不支持bootstrap,只能选择 Debezium。
一些有意思的事情:
- 在调研时 google 出来的资料,基于kafka connector 的 Debezium 会比基于Flink 的FlinkX 更多;
- Debezium是基于kafka connector 集成开发的与kafka 高度耦合
- FlinkX的mysql binlog 同步基于canal的客户端开发的
- kafka 1.0 以后 connector的发展很快,confluent 有很多开源的connector。
参考资料