canal,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
这里我们可以简单地把canal理解为一个用来同步增量数据的一个工具。
MySQL主备复制原理
MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
canal 工作原理
canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
canal 解析 binary log 对象(原始为 byte 流)
1、开启mysql binlog功能
开启之后对mysql的性能会有一定的影响
# 修改my.cnf
vim /etc/my.cnf
[mysqld]
# 打开binlog
log-bin=mysql-bin
# 选择ROW(行)模式
binlog-format=ROW
# 配置MySQL replaction需要定义,不要和canal的slaveId重复
server_id=1
# 改了配置文件之后,重启MySQL,使用命令查看是否打开binlog模式:
service mysqld restart
# 进入mysql命令行验证一下
show variables like 'log_bin';
2、搭建canal
# 解压到指定目录下
tar -xvf canal.deployer-1.1.4.tar.gz
#修改配置文件conf/example/instance.properties
# mysql地址
canal.instance.master.address=master:3306
# mysql用户名和密码
canal.instance.dbUsername=root
canal.instance.dbPassword=123456
# 增加canal数据采集之后写入kafkatopic
# 动态topic,每一个表自动创建一个topic
canal.mq.dynamicTopic=bigdata\\..*
# 修改配置文件conf/canal.properties
# zookeeper的地址,如果有多台需要写多个使用逗号分隔
canal.zkServers = master:2181
# canal保存数据的位置
canal.serverMode = kafka
# kafka地址列表
canal.mq.servers = master:9092
# 启动Canal 启动后会出现进程CanalLauncher
# 启动canal之前需要先保证kafka处于启动状态
cd /usr/local/soft/canal/bin/
# 启动
./startup.sh
# 停止
stop.sh
# 重启
restart.sh
## 测试
-- 在mysql创建表插入数据
mysql -uroot -p123456
use `bigdata`;
-- 创建表
CREATE TABLE `order`
(
id BIGINT UNIQUE PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
order_id VARCHAR(64) COMMENT '订单ID',
amount DECIMAL(10, 2) COMMENT '订单金额',
create_time DATETIME COMMENT '创建时间',
UNIQUE uniq_order_id (`order_id`)
) COMMENT '订单表';
-- 插入数据
INSERT INTO `order`(order_id, amount) VALUES ('100', 66);
UPDATE `order` SET amount = 88 WHERE order_id = '100';
DELETE FROM `order` WHERE order_id = '100';
-- 查看kafka中是否出现topic
kafka-topics.sh --list --zookeeper master:2181,node1:2181,node2:2181
--会出现bigdata.order
-- 消费数据
kafka-console-consumer.sh --bootstrap-server master:9092 --from-beginning --topic bigdata.order
《行业指标体系白皮书》下载地址:https://www.dtstack.com/resources/1057/?src=bbs
《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001/?src=bbs
《数栈V6.0产品白皮书》下载地址:https://www.dtstack.com/resources/1004/?src=bbs
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack