前言
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