MySQL BinLog实战应用之二-CSDN博客
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一、前言
上篇 MySQL Binlog实战应用之一 主要讲了BinLog的开启以及用MySQLBinLog读取BigLog二进制文件但MySQLBinLog很难直接对接Java所以有了Canal这个Alibaba开发的用于MySQL增量日志解析提供增量数据的订阅和消费组件。
二、Canal原理
我们知道MySQL主从复制是Mster将数据变更写入BinLog然后Slave将Master的BinLog拷贝到它的中继日志最后重放中继日志完成将数据同步到Slave。
Canal其实它就是参考主从复制原理将自己伪装成Slave接收Master推送的二进制日志。
Cannel包括两部分
-
服务端将自己伪装成Slave并从Master获取Binlog以供消费端使用。
-
客户端订阅服务端数据变更事件处理后存储到对应的数据仓库中RDB、HBase、ES。
Canal的应用可以用于做数据同步在线库同步到离线库、增量数据同步ES等。
三、Canal服务端安装配置
下载解压
Canal同步账号创建及授权
配置文件 conf/example/instance.properties
因为我Linux服务器上安装的是JDK17.用startup.sh启动报了一堆错只需要将JAVA_OPTS中报错的配置删除即可另外我机器内存只有1G,需要调整一下堆内存的最大值和初始值。
/bin/startup.sh 启动后可以查看到日志输出日志没有报错就启动成功了。
四、canal客户端
依赖
消费端代码类似于MQ的消息接收端
执行UPDATFE语句
接收端收到消息变更前该记录所有字段值变更后该记录所有字段值
mysqlbinlog直接解析canal要求mysqlBinlog配置为row
注这里是仅单机环境我们的场景单机也就可以了如果要保证可靠性使用多个接收端需要引入zk来保证同一时间只有一个消费端工作因为canal通过ack保证必须按顺序消费以免数据无序造成数据错乱。