【linux-centos】Canal和Kafka实现mysql的binlog
原理:
Canal模拟MySQL Slave的交互协议,伪装自己为MySQL Slave,向MySQL Master发送dump协议
基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费
前提:mysql开启binlog
查看是否开启mysql binlog
SHOW VARIABLES LIKE 'log_bin';
依赖:Canal的安装依赖于Zookeeper,需要先安装Zookeeper
一、安装Zookeeper
https://www.cnblogs.com/shixiangqian/p/14856043.html
二、安装Canal:
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
mkdir canal-1.1.4
tar -zxvf canal.deployer-1.1.4.tar.gz -C ./canal-1.1.4 解压到canal-1.1.4目录
mv canal-1.1.4 /usr/local/
目录说明:
/usr/local/canal-1.1.4/bin 运行脚本
/usr/local/canal-1.1.4/conf 配置文件
canal_local.properties canal本地配置,一般不需要动
canal.properties canal服务配置
logback.xml logback日志配置
metrics 度量统计配置
spring spring-实例配置,主要和binlog位置计算、一些策略配置相关,可以在canal.properties选用其中的任意一个配置文件
example 实例配置文件夹,一般认为单个数据库对应一个独立的实例配置文件夹
instance.properties 实例配置,一般指单个数据库的配置
/usr/local/canal-1.1.4/lib 服务依赖包
/usr/local/canal-1.1.4/logs 日志
修改配置:
cd /usr/local/canal-1.1.4/conf
vim logback.xml
root level="DEBUG" 改为debug模式
vi canal.properties
去掉canal.instance.parser.parallelThreadSize = 16注释,?
canal.serverMode=kafka 可选值:tcp|kafka|rocketmq|rabbitmq(1.1.5)
canal.mq.servers=127.0.0.1:9092 配置为kafka的服务
vi example/instance.properties
canal.instance.mysql.slaveId=123 相当于从库节点id,不能和mysql的节点重复,必须是数字
canal.instance.dbUsername=mysql的用户名
canal.instance.dbPassword=mysql的密码
canal.instance.defaultDatabaseName=kafka_test 新增该条配置,指定监听数据库名称
canal.mq.topic=kafka_binlog 指定topic的名称
canal.mq.partition=0 分区
mysql创建用户名用于canal的监听,mysql语句是:
CREATE USER canal IDENTIFIED BY '#1!wsdcFg3#4rtgfq6%';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY '#1!wsdcFg3#4rtgfq6%';
***启动canal
/usr/local/canal-1.1.4/bin/startup.sh
***开启kafka的消费端监听:
/usr/local/kafka_2.13-3.6.1/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kafka_binlog --from-beginning
kafka_2.13-3.6.1目录不存在?
这是创建表后的示例json
{"data":null,"database":"kafka_test","es":1622983201000,"id":2,"isDdl":true,"mysqlType":null,"old":null,"pkNames":null,"sql":"CREATE TABLE `kafka_test`.`user_info` (\r\n `id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',\r\n `name` varchar(255) NULL,\r\n PRIMARY KEY (`id`)\r\n)","sqlType":null,"table":"user_info","ts":1622983208123,"type":"CREATE"}
如何修改json的格式?
vi /etc/my.cnf
binlog_format=ROW #将mixed改为row

{"data":[{"id":"1","name":"zhangsan1222"}],"database":"kafka_db","es":1705932736000,"id":5,"isDdl":false,"mysqlType":{"id":"int(0) unsigned","name":"varchar(255)"},"old":[{"name":"zhangsan12"}],"pkNames":["id"],"sql":"","sqlType":{"id":4,"name":12},"table":"member","ts":1705932736716,"type":"UPDATE"}
php监听kafka的消费:
需要安装php-rdkafka扩展,安装方式:https://www.cnblogs.com/shixiangqian/p/14856009.html
浙公网安备 33010602011771号