实时数据同步服务
CDC 是什么?
CDC 的全称是 Change Data Capture ,在广义的概念上,只要是能捕获数据变更的技术,我们都可以称之为 CDC 。目前通常描述的 CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术。
CDC 技术的应用场景非常广泛:
- 数据同步:用于备份,容灾;
- 数据分发:一个数据源分发给多个下游系统;
- 数据采集:面向数据仓库 / 数据湖的 ETL 数据集成,是非常重要的数据源。
CDC 的技术方案非常多,目前业界主流的实现机制可以分为两种:
- 基于查询的 CDC:
- 离线调度查询作业,批处理。把一张表同步到其他系统,每次通过查询去获取表中最新的数据;
- 无法保障数据一致性,查的过程中有可能数据已经发生了多次变更;
- 不保障实时性,基于离线调度存在天然的延迟。
- 基于日志的 CDC:
- 实时消费日志,流处理,例如 MySQL 的 binlog 日志完整记录了数据库中的变更,可以把 binlog 文件当作流的数据源; - 保障数据一致性,因为 binlog 文件包含了所有历史变更明细;
- 保障实时性,因为类似 binlog 的日志文件是可以流式消费的,提供的是实时数据。
常见的开源 CDC 方案:
MySQL+Canal+Kafka实时计算方案
当用户数据产生写入到 mysql, canal 监控到 mysql 的写操作,解析 binlog 日志写入到 kafka。
Canal简介
canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
工作原理
canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave 订阅 MySQL master 的 binlog,实现数据同步的中间件。
支持将订阅到的数据投递到kafka
canal 1.1.1版本之后,server 端可以通过简单的配置就能将订阅到的数据投递到 MQ 中,目前支持的 MQ 有 kafka、RocketMQ。
Canal部署
到 canal官网 下载服务端的安装包:
将canal.deployer解压到固定目录:
tar zxvf canal.deployer-1.1.5.tar.gz -C /opt/canal
目录结构:
├── canal
│ ├── bin
│ │ ├── restart.sh
│ │ ├── startup.bat
│ │ ├── startup.sh
│ │ └── stop.sh
│ ├── conf
│ │ ├── canal.properties
│ │ ├── example
│ │ │ ├── instance.properties
配置修改参数
参考文档: Canal Kafka RocketMQ QuickStart
- 修改instance 配置文件canal/conf/example/instance.properties
# 需要同步的MySQL数据库地址
canal.instance.master.address=127.0.0.1:3306
# 配置数据库的用户名和密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
# 需要同步的数据库名称
canal.instance.defaultDatabaseName = test
# 设置要订阅的topic名称
canal.mq.topic= example
- 修改canal 配置文件canal/conf/canal.properties
# 当前canal server所在机器的ip
canal.ip = 127.0.0.1
# register ip to zookeeper
canal.register.ip = 127.0.0.1:2181
# 可选项: tcp(默认), kafka, RocketMQ
canal.serverMode = kafka
# canal.properties配置文件同级目录下的example目录
canal.destinations = example
# 配置kafka对应的地址和端口
canal.mq.servers = 127.0.0.1:9092
启动
切换到canal/bin目录:
sh ./start.sh