关于canal同步mysql binlog到kafka的一些常用命令

前言

1、下载安装canal-admin-1.1.4

2、在canal-admin-1.1.4界面创建集群命名为test_cluser

3、canal.deployer-1.1.4安装包,修改canal_local.properties配置

设置
canal.admin.register.cluster = test_cluster
集群名称一定要相同

启动sever命令 sh bin/startup.sh local

4、sever会自动注册到admin

5、配置canal.properties

6、配置instance.properties

7、启动instance实例即可采集了

 

一、kafka

查看topic :bin/kafka-topics.sh --list --zookeeper localhost:2181

消费topic命令:新版 bin/kafka-console-consumer.sh --bootstrap-server localhost:6667 --topic example_test --from-beginning   

  旧版:bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic example_test --from-beginning         

 

 

创建数据库的信息也会记录下来、

{"data":null,"database":"mytest","es":1594903914000,"id":9,"isDdl":false,"mysqlType":null,"old":null,"pkNames":null,"sql":"create database mytest","sqlType":null,"table":"","ts":1594903914133,"type":"QUERY"}

 

 

 

二、模拟测试数据

use `test`;

CREATE TABLE `order`
(
    id          BIGINT UNIQUE PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
    order_id    VARCHAR(64)    NOT NULL COMMENT '订单ID',
    amount      DECIMAL(10, 2) NOT NULL DEFAULT 0 COMMENT '订单金额',
    create_time DATETIME       NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    UNIQUE uniq_order_id (`order_id`)
) COMMENT '订单表';

INSERT INTO `order`(order_id, amount) VALUES ('10086', 999);
UPDATE `order` SET amount = 10087 WHERE order_id = '10086';
DELETE  FROM `order` WHERE order_id = '10086';

三、instance.properties

# 连接的数据库地址
canal.instance.master.address=192.168.1.20:3306
# 用户名,密码
canal.instance.dbUsername = canal
canal.instance.dbPassword = canal
# 同步的库
canal.instance.defaultDatabaseName =
# 数据库的编码格式
canal.instance.connectionCharset = UTF-8
# 表的过滤规则 无论是CanalServer还是Consumer,只要有一方指定了filter都会生效,consumer端如果指定,则会覆盖CanalServer端。
# 所有表:.*   or  .*\\..*
# canal schema下所有表: canal\\..*
# canal下的以canal打头的表:canal\\.canal.*
# canal schema下的一张表:canal.test1
# 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
# 监听test库下所有表
canal.instance.filter.regex = test\\..*
...
# mq config
canal.mq.topic=example
# 针对库名或者表名发送动态topic,1.1.3版本后开始支持,需要设置kafka自动创建topic
# canal.mq.dynamicTopic=mytest,.*,mytest.user,mytest\\..*,.*\\..*
# 单队列模式的分区下标
canal.mq.partition=0
# 散列模式的分区数
# hash partition config
#canal.mq.partitionsNum=3
# 散列规则定义
# 库名.表名 : 唯一主键,比如mytest.person:id。多个表之间用逗号分隔
#canal.mq.partitionHash=mytest.person:id,mytest.role:id

 

二、使用canal-admin

启动集群模式:

我们

在canal的安装目录/bin目录下执行startup.sh 传入参数local

启动canal-admin后

再启动canal.deployer-1.1.4

# 启动方法一:
sh bin/startup.sh local
 
 
# 启动方法二:
# ---将canal_local.properties配置文件的名字改成canal.properties(删除原有的)
sh bin/startup.sh

 

在canal-admin界面配置instance实例命名为instance_test,在操作栏点启动命令

登录到服务器后台,发现日志里多了一个文件夹名为instance_test的日志。

开始测试,回到mysql客户端

mysql> INSERT INTO `order`(order_id, amount) VALUES ('10081', 1001); 
Query OK, 1 row affected (0.05 sec)

kafka消费端就多一条日志信息


{"data":[{"id":"4","order_id":"10081","amount":"1001.0","create_time":"2020-07-16 21:20:31"}],"database":"test","es":1594905631000,"id":2,"isDdl":false,"mysqlType":{"id":"bigint(20)","order_id":"varchar(64)","amount":"decimal(10,2)","create_time":"datetime"},"old":null,"pkNames":["id"],"sql":"","sqlType":{"id":-5,"order_id":12,"amount":3,"create_time":93},"table":"order","ts":1594905632040,"type":"INSERT"}

回头来总结一下:

单机版和集群版的配置完全不一样

集群版的server和instance都可以通过界面配置,也就是在服务器配置server端的时候只关心canal_local.properties文件,canal.properties文件不要改动(如果改动了可能造成新的问题),然后在canal-admin的webUI配置server和instance

 

参考:https://www.itgrocery.cn/posts/99c08147/

https://www.cnblogs.com/xiexiandong/p/12888582.html

https://blog.csdn.net/weixin_40126236/article/details/100777543

https://zhuanlan.zhihu.com/p/154412917

https://zhuanlan.zhihu.com/p/62767299?utm_source=wechat_session

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值