canal配置RocketMQ做消息数据同步

本文介绍了如何配置阿里巴巴的canal组件,利用RocketMQ实现MySQL数据库的增量数据同步到ES和MongoDB。canal模拟MySQL slave与master交互,解析binary log并推送到目标系统。在公司项目中,通过配置多个实例以同步不同数据库和表,并展示了接收到的MQ消息示例。
摘要由CSDN通过智能技术生成

前言:由于我们公司需要数据库中的数据分别同步到ES、Mongodb及redis中,最初使用的是binlog而最近发现了一款性能更好的即阿里巴巴mysql数据库binlog的增量订阅&消费组件canal

canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

 从一张官网图中,我们可以看到canal的原理

  1. canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
  2. MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
  3. canal 解析 binary log 对象,最后将解析的内容发送给mysql、kafka、es、rocketMQ等

配置

首先介绍我们这边的版本:canal.deployer-1.1.5(采用的是win10环境)

以下是目录结构:

 

以下配置都需要我们自行配置RocketMQ及MySQL的相关配置

canal.deployer-1.1.5/conf/canal.properties

# 配置模式tcp, kafka, rocketMQ, rabbitMQ 
canal.serverMode = rocketMQ
...
# 指定实例目前包里自带example(可支持多个)
canal.destinations = example,example2
...
# 配置mq的accessKey、secretKey 
canal.aliyun.accessKey =LTAIs4e56kBVE9
canal.aliyun.secretKey =pJPGAtvJKGWsS
...
# 配置mq的group地址、group、topic及tag
rocketmq.producer.group =CANCAL
rocketmq.customized.trace.topic =canal_test
rocketmq.namespace =MQ_INST_10142odK
rocketmq.namesrv.addr = http://MQ_INSTaccess.mq-internet.aliyuncs.com:80
rocketmq.tag = data_tag

实例example

canal.deployer-1.1.5/conf/example/instance.properties

# 数据库连接
canal.instance.master.address=test-public.mysql.com:3306
...
# 数据库用户密码
canal.instance.dbUsername=b2b
canal.instance.dbPassword=123456
...
# 匹配数据库的正则(库.表)
canal.instance.filter.regex=cr_debug.user
...
# mq的topic
canal.mq.topic=canal_test

实例example2

canal.deployer-1.1.5/conf/example2/instance.properties

# 数据库连接
canal.instance.master.address=test-public.mysql.com:3306
...
# 数据库用户密码
canal.instance.dbUsername=b2b
canal.instance.dbPassword=123456
...
# 匹配数据库的正则(库.表)
canal.instance.filter.regex=cr_debug.user_2
...
# mq的topic
canal.mq.topic=canal_test2

由于我们公司有多个项目,因此存在监控多个数据库及表因此我们需要配置多个实例

我们可以复制一个example的实例为example2,再对其里面的instance.properties进行对其他表及mq的配置就行了

# 指定实例目前包里自带example(可支持多个)
canal.destinations = example,example2

启动: canal.deployer-1.1.5/bin/startup.bat

MQ监测得到的信息

cr_debug.user表信息的变动以后发送的MQ消息

cr_debug.user_2表信息的变动以后发送的MQ消息

而收到的消息体:

 {
    "data":[
        {
            "id":"1",
            "name":"Jone1",
            "age":"18",
            "email":"test1@baomidou.com"
        }
    ],
    "database":"cr_debug",
    "es":1630552485000,
    "id":7,
    "isDdl":false,
    "mysqlType":{
        "id":"int(11)",
        "name":"varchar(50)",
        "age":"int(11)",
        "email":"varchar(50)"
    },
    "old":[
        {
            "name":"Jone"
        }
    ],
    "pkNames":[
        "id"
    ],
    "sql":"",
    "sqlType":{
        "id":4,
        "name":12,
        "age":4,
        "email":12
    },
    "table":"user",
    "ts":1630552485953,
    "type":"UPDATE"
}

 通过代码监听到,可以看到data中就是我们更改后的内容,type为操作类型分别还有对应database以及table,拿到这些消息后我们可以进行自己的业务处理

参考资料

canal官方网站:Gitee 极速下载/canal

canal配置 rocketmq 做消息数据同步_canal.mq.servers = 192.168.30.219:9876-CSDN博客

好的,我可以为您提供一些基本的步骤,但需要注意的是,您需要确保您的服务器已经正确安装了 Docker 和 RocketMQ。 1. 拉取 canal 和 canal-server 镜像 ``` docker pull canal/canal-server:v1.1.4 docker pull canal/canal-admin:v1.1.4 ``` 2. 创建 canal 配置文件 在本地创建一个 canal 目录,并在其中创建一个配置文件 `instance.properties`,内容如下: ``` canal.instance.master.address=127.0.0.1:3306 canal.instance.dbUsername=xxxx canal.instance.dbPassword=xxxx canal.instance.connectionCharset=UTF-8 canal.instance.tsdb.enable=true canal.instance.gtidon=false canal.instance.filter.regex=.*\\..* ``` 其中,`canal.instance.master.address` 需要指定 MySQL 数据库的地址和端口,`canal.instance.dbUsername` 和 `canal.instance.dbPassword` 则是 MySQL 数据库的用户名和密码。 3. 启动 canal-server 使用以下命令启动 canal-server: ``` docker run -p 11111:11111 \ -v /path/to/canal:/canal \ --name canal-server \ -d canal/canal-server:v1.1.4 \ sh /canal/bin/startup.sh ``` 其中,`/path/to/canal` 是您本地的 canal 目录路径。 4. 创建 RocketMQ 镜像 如果您的服务器中没有 RocketMQ 镜像,可以使用以下命令创建: ``` docker pull rocketmqinc/rocketmq:4.9.1 ``` 5. 创建 RocketMQ 容器 使用以下命令创建 RocketMQ 容器: ``` docker run -d \ --name rmqnamesrv \ -p 9876:9876 \ -v /path/to/store/namesrv/logs:/root/logs \ -v /path/to/store/namesrv/store:/root/store \ rocketmqinc/rocketmq:4.9.1 \ sh mqnamesrv ``` 其中,`/path/to/store/namesrv/logs` 和 `/path/to/store/namesrv/store` 分别是您本地用于存储 RocketMQ 日志和数据的路径。 6. 创建 RocketMQ Producer 镜像 如果您的服务器中没有 RocketMQ Producer 镜像,可以使用以下命令创建: ``` docker pull rocketmqinc/rocketmq-console-ng:2.0.0 ``` 7. 启动 RocketMQ Producer 容器 使用以下命令启动 RocketMQ Producer 容器: ``` docker run -d \ -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \ --name rmqproducer \ -p 8080:8080 \ rocketmqinc/rocketmq-console-ng:2.0.0 ``` 其中,`-Drocketmq.namesrv.addr` 指定了 RocketMQ 的地址和端口。 8. 在 Canal配置 RocketMQ 同步 进入到 `canal-admin` 的管理界面,创建一个实例,并配置同步规则,将数据同步RocketMQ 中。 以上就是部署 Canal同步消息RocketMQ 的基本步骤,具体实现还需要根据您的实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值