实时数据同步服务

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

  1. 修改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
  1. 修改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
posted @ 2022-03-16 18:40  当康  阅读(558)  评论(0编辑  收藏  举报