MySQL BinLog实战应用之二

一、前言

上篇  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

MySQL BinLog实战应用之二_第1张图片

因为我Linux服务器上安装的是JDK17.用startup.sh启动报了一堆错,只需要将JAVA_OPTS中报错的配置删除即可,另外我机器内存只有1G,需要调整一下堆内存的最大值和初始值。

/bin/startup.sh 启动后可以查看到日志输出,日志没有报错就启动成功了。

四、canal客户端

依赖

MySQL BinLog实战应用之二_第2张图片

消费端代码:类似于MQ的消息接收端

MySQL BinLog实战应用之二_第3张图片

MySQL BinLog实战应用之二_第4张图片

执行UPDATFE语句

接收端收到消息(变更前该记录所有字段值,变更后该记录所有字段值)

mysqlbinlog直接解析,canal要求mysqlBinlog配置为row

MySQL BinLog实战应用之二_第5张图片

注:这里是仅单机环境,我们的场景单机也就可以了,如果要保证可靠性使用多个接收端,需要引入zk来保证同一时间只有一个消费端工作,因为canal通过ack保证必须按顺序消费,以免数据无序造成数据错乱。

你可能感兴趣的:(存储,mysql,数据库)