目录
(2)conf/example/instance.properties
一、Canal
阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务。
canal是用java开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,canal主要支持了MySQL的binlog解析,解析完成后才利用canal client 用来处理获得的相关数据。(数据库同步需要阿里的otter中间件,基于canal)
mysql的主从复制主要靠二进制文件实现,而canal把自己伪装成slave,假装从master复制数据
在本架构中,canal通过binlog同步拿到变更数据,再发送到Kafka
Ⅰ、下载安装
下载:Releases · alibaba/canal (github.com)
进行解压、安装
mkdir -p /opt/canal
tar zxvf canal.deployer-1.1.2.tar.gz -C /opt/canal/
Ⅱ、配置主要配置文件
(1)conf/canal.properties
cd /opt/canal/conf/
vim canal.properties
#################################################
######### common argument #############
#################################################
#----------------------------
# tcp, kafka, RocketMQ
canal.serverMode = kafka
#修改为kafka,默认为tcp
#----------------------------
##################################################
######### MQ #############
##################################################
#----------------------------
canal.mq.servers = ljp26:9092,ljp111:9092,ljp120:9092
#定义MQservers
#----------------------------
(2)conf/example/instance.properties
vim /opt/canal/conf/example/instance.properties
#################################################
## mysql serverId , v1.0.26+ will autoGen
canal.instance.mysql.slaveId=10
#解注释,修改id
#=========================================================
# username/password
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
#定义数据库登录的用户与密码
canal.instance.connectionCharset = UTF-8
canal.instance.defaultDatabaseName =test
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==
#=========================================================
# mq config
canal.mq.topic=canal
canal.mq.partition=0
#定义消息队列的topic
Ⅲ、开启canal
/opt/canal/bin/startup.sh
二、MySQL
Ⅰ、 搭建与基础使用
Ⅱ、开启二进制日志
mysql在这里的主要设置:
vim /etc/my.cnf
[mysqld]
#=======================================
log-bin=mysql-bin
#开启二进制日志
binlog_format=row
#二进制日志记录格式
bin-log-db=example
#定义开启二进制日志的库
#=======================================
---wq
systemctl restart mysqld
三、Kafka+Zookeeper集群
Ⅰ、搭建与基础使用
Ⅱ、创建topic
群集开启(Kafka+Zookeeper)
kafka-topic.sh --create --bootstrap-server ljp26:9092,ljp111:9092,ljp120:9092
--partitions 3 --replication-factor 2 --topic canal
kafka-topic.sh --describe --bootstrap-server ljp26:9092,ljp111:9092,ljp120:9092
--topic canal
四、测试
Ⅰ、数据库操作
做完以上的操作后,确保canal开启、mysql开启、kafka群集开启
我们进入mysql数据库,做一些增删改操作
例:
mysql>GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'
@'%' IDENTIFIED BY 'canal' ;
mysql> create table test1.test (id int(5),user_name char(8),primary_key(id));
Ⅱ、kafka消费
kafka-console-consumer.sh --bootstrap-server ljp26:9092,ljp111:9092,ljp120:9092
--topic canal
得到二进制日志数据,成功