实时数仓实践(一)之数据库实时增量同步工具-CDC(Change Data Capture)

数据库实时增量同步工具-CDC(Change Data Capture)

Canal

阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机 房的需求,从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生 出了增量订阅&消费的业务。

Canal是用java开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,Canal主要支持了MySQL 的binlog解析,解析完成后才利用Canal client 用来处理获得的相关数据。(数据库同步需要阿里的otter中间件,基 于Canal)。

使用场景

1.原始场景: 阿里otter中间件的一部分 otter是阿里用于进行异地数据库之间的同步框架,Canal是其中一部分。

Databus

LinkedIn开源

1)Databus 分布式数据同步系统
2)Cubert 高性能计算引擎
3)ParSeq Java一部处理框架
4)kafka 流处理平台

Databus&canal对比

截止2018-10-09

Databus和canal都能够提供实时从数据库获取变更,并提供给下游的实时消费流的功能。

本文针对两个系统实现和应用上的不同点,做了一个简单的对比:

对比项 Databus canal 结论
支持的数据库 mysql, oracle mysql(据说内部版本支持oracle) Databus目前支持的数据源更多
业务开发 业务只需要实现事件处理接口 事件处理外,需要处理ack/rollback,反序列化异常等 Databus开发接口用户友好度更高
服务模型 relay relay可以同时服务多个client 一个server instance只能服务一个client(受限于server端保存拉取位点) Databus服务模式更灵活
client client可以拉取多个relay的变更,访问的relay可以指定拉取某些表某些分片的变更 client只能从一个server拉取变更,而且只能是拉取全量的变更
可扩展性 client可以线性扩展,处理能力也能线性扩展(Databus可识别pk,自动做数据分片) client无法扩展 Databus扩展性更好
可用性 client ha client支持cluster模式,每个client处理一部分数据,某个client挂掉,其他client自动接管对应分片数据 主备client模式,主client消费,如果主client挂掉,备client可自动接管 Databus实时热备方案更成熟
relay/server ha 多个relay可连接到同一个数据库,client可以配置多个relay,relay故障启动切换 主备relay模式,relay通过zk进行failover canal主备模式对数据库影响更小
故障对上游数据库的影响 client故障,bootstrap会继续拉取变更,client恢复后直接从bootstrap拉取历史变更 client故障会阻塞server拉取变更,client恢复会导致server瞬时从数据库拉取大量变更 Databus本身的故障对数据库影响几乎为0
系统状态监控 程序通过http接口将运行状态暴露给外部 暂无 Databus程序可监控性更好
开发语言 java,核心代码16w,测试代码6w java,4.2w核心代码,6k测试代码 Databus项目更成熟,当然学习成本也更大

Debezium

截止2019.11.17

RedHat开源的Debezium是一个将多种数据源实时变更数据捕获,形成数据流输出的开源工具。
它是一种CDC(Change Data Capture)工具,工作原理类似大家所熟知的Canal, DataBus, Maxwell等,是通过抽取数据库日志来获取变更的。
官方介绍为:

Debezium is an open source distributed platform for change data capture. Start it up, point it at your databases, and your apps can start responding to all of the inserts, updates, and deletes that other apps commit to your databases. Debezium is durable and fast, so your apps can respond quickly and never miss an event, even when things go wrong

为什么选择Debezium

网上关于实时采集Oracle数据的资料并不多,通常的做法有以下几种:

  1. 需要购买Oracel原生提供的OGG ,debizum的本质也是基于OGG,这种方式虽然省事但是价格昂贵;

对比4种CDC工具,其中GoldenGate简称ogg,Debezium简称dbz,DataPipeline简称dp。对比如下:


支持的数据源、目标类型

对比项 GoldenGate Debezium DataPipeline Pglogical
Mysql 源/目标 源/目标 /
Oracle 源/目标 源(不成熟) 源/目标 /
PostgreSQL 目标 源/目标 源/目标
Kafka 目标 目标 目标 /
SQLServer 目标 目标 /
MongoDB 目标 /
Hive/HBase/Hdfs 目标 / 目标 /

主要功能对比

对比项 GoldenGate Debezium DataPipeline Pglogical
license 商业收费,oracle原厂支持 开源免费,非常活跃,迭代速度极快 商业收费,原厂支持 开源免费,迭代速度较快
DDL同步 MySQL,Oracle MySQL,SQLServer 有限支持 PostgreSQL
双向同步 Y N 有限支持 N
主键/唯一约束冲突处理 Y 需消费端自行实现 Y Y
要求与源库装在同一台机器,目标库版本不低于源库 必须
初始化批量同步 initial load snapshot 支持 copy
web界面 N N Y N
数据幂等性 Y 需消费端自行实现 Y Y
监控策略 命令行/monitor http接口 web界面 命令行
调优策略 修改配置 较复杂 修改配置 修改配置
结构迁移 N N Y N

通过对比综合考虑,我们最终决定
PostgreSQL->PostgreSQL的同步,目标库版本不低于源库版本,使用开源工具Pglogical
PostgreSQL->非PostgreSQL的同步,或高版本PostgreSQL->低版本PostgreSQL,使用Debezium + Kafka + 自行开发消费端

Maxwell

https://github.com/zendesk/maxwell

引用

Flink+Clickhouse实时数仓在广投集团的最佳实践

https://www.jianshu.com/p/6aaa2f61f56b

深度对比delta、iceberg和hudi三大开源数据湖方案

https://mp.weixin.qq.com/s/m8-iFg-ekykWGrG3gXlLew

增量数据同步工具Debezium介绍

https://www.jianshu.com/p/61e604299b5e

你可能感兴趣的:(实时数仓实践)