1、概念

  1. canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL

2、原理

mysql的主从复制:
1、master将改变记录写入二进制日志中(被称为二进制事件)
2、slave将master的二进制事件拷贝到中继日志中,
3、slave重做中继日志中的事件

canal的原理:
1、canal模拟mysql slave的交互协议,伪装自己为slave,向master发送dump协议
2、master收到dump请求,开始推送binary log给canal
3、canal解析binary log 对象

3、使用场景

1、更新缓存
2、抓取业务数变化,用来制作拉链表
3、抓取业务数据变化,用来制作实时数据

4、安装

1、MySQL配置:
vim /etc/my.cnf
[mysqld]
server-id= 1
log-bin=mysql-bin
binlog_format=row
binlog-do-db=gmall2020

2、进入mysql:mysql -uroot -p123456

3、执行:GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%' IDENTIFIED BY 'canal' ;

5、重启MySQL

6、下载canal:https://github.com/alibaba/canal/releases  (canal.deployer-1.1.4.tar.gz)

7、解压:tar -zxvf canal.deployer-1.1.4.tar.gz /opt/module/canal/

8、修改配置:vim /opt/module/canal/conf/canal.properties
canal.zkServers = hadoop102:2181, hadoop103:2181, hadoop104:2181         zk地址
canal.serverMode = kafka
canal.mq.servers = hadoop102:9092, hadoop103:9092, hadoop104:9092        kafka地址

9、修改实例配置:vim /opt/module/canal/conf/example/instance.properties
canal.instance.master.address=hadoop102:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false

10、启动zk和kafka

11、启动canal
/opt/module/canal/bin/startup.sh

5、HA

1、vim /opt/module/canal/conf/canal.properties
注释掉canal.instance.global.spring.xml = classpath:spring/file-instance.xml,
打开canal.instance.global.spring.xml = classpath:spring/default-instance.xml

2、分发

3、重启

6、演示使用

1、打开kafka消费者:
kafka-console-consumer.sh --bootstrap-server  hadoop1:9092 --topic GMALL2020_DB

2、改变MySQL的数据(手动改变任意数据)

3、可以看到kafka消费到了数据

4、cd /opt/module/canal/conf/example  ll
-rw-rw-r-- 1 atguigu atguigu 307200 7月  24 16:43 h2.mv.db
-rwxrwxr-x 1 atguigu atguigu   2076 7月  24 14:46 instance.properties
-rw-rw-r-- 1 atguigu atguigu    114 7月  24 16:43 meta.dat

7、与maxwell对比