Kafka Connect之Canal

2017-08-24  本文已影响2843人  九七学姐

Canal介绍及其原理,多谢博主的共享,对Canal和MaxWell的区别瞬间懂了很多。

1.Canal和Maxwell作为kafka source的区别

阿里开源的Canal进行Mysql binlog数据的抽取,另需开发一个数据转换工具将从binlog中解析出的数据转换成自带schema的json数据并写入kafka中。而使用maxwell可直接完成对mysql binlog数据的抽取和转换成自带schema的json数据写入到kafka中。

另外Maxwell作为kafka connector的话需要metric的东西也比较多,因此此处我的kafka Connect选择了Canal.

2.Canal -> kafka的实现

像1中所说的实现Canal作为kafka的生产者,kafka作为消费者,还需要一个中间件。github上有给出这个,地址:https://github.com/sasou/syncClient
以下为运行步骤:

canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能,并且配置binlog模式为row.
$ vim /etc/mysql/my.cnf

[mysqld]
log-bin=mysql-bin #添加这一行就ok    
binlog-format=ROW #选择row模式    
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复 

注意完成后一定要重启mysql服务
$ service mysql stop
$ service mysql start

CREATE USER canal IDENTIFIED BY 'canal';      
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
GRANT SELECT,REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO canal[@localhost];
FLUSH PRIVILEGES;  

针对已有的账户可通过grants查询权限:
show grants **for** 'canal';

debug=1
ip=127.0.0.1
port=11111
destination=example
username=
password=
filter=

#kafka
kafkaIp=127.0.0.1
kafkaPort=9092

注意这里的username,password和canal配置中的dbusername,dbpassword的区别。Canal配置中的dbusername,dbpassword是指canal读取mysql的binlog时的用户和密码,默认是canal,canal。但是这里的username和password是指canal自身的用户和密码(即连接到这个数据实时同步中间件时的用户和密码),默认是空。
之后在bin目录下运行
sh start.sh即可看到
empty 0
empty 1
……
这样的输出

上一篇 下一篇

猜你喜欢

热点阅读