canal实现原理
1、canal server端会伪装成mysql从节点,去读取mysql主节点binlog文件,实现增量同步
2、canal server端将数据以json格式同步到客户端,MQ消费者消费消息,将数据同步到redis
来源于蚂蚁课堂
环境搭建
配置Mysql服务器
1、配置MySQL的 my.cnf 开启允许基于binlog文件主从同步,在[mysqld]下添加以下配置
log-bin=mysql-bin #添加这一行就ok
binlog-format=ROW #选择row模式
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
配置该文件后,重启mysql服务器即可
2、添加cannl的账号 或者直接使用自己的root账号
drop user 'canal'@'%';
CREATE USER 'canal'@'%' IDENTIFIED BY'canal';
grant all privileges on *.* to 'canal'@'%'identified by 'canal';
flush privileges;
构建CanalService
1、下载canal
2、修改\conf\example下的instance.properties 配置文件内容
canal.instance.master.address=127.0.0.1:3306
canal.instance.dbUsername=root
canal.instance.dbPassword=****
3、修改example/instance.properties
canal.mq.topic=test-topic
4、修改canal.properties
# tcp, kafka, RocketMQ
canal.serverMode = kafka
canal.mq.servers = 127.0.0.1:9092
5、./startup.sh 启动canal服务器端
注意:
如果canal+kafka+mysql数据同步配置成功后,zookeeper没有自动创建主题。可以将数据库的数据做一下修改,这是因为canal是懒加载的形式创建kafka的主题的,建议可以把数据库的内容做变更下,canal就会出发创建kafka主题。
创建CanalClient
Maven依赖
org.springframework.kafka
spring-kafka
com.alibaba.otter
canal.client
1.1.0
zookeeper的环境搭建
解压
> tar -zxvf zookeeper-3.4.10.tar.gz //解压
> cd zookeeper-3.4.10/conf //切换到配置目录下
> mv zoo_sample.cfg zoo.cfg //更改默认配置文件名称
> vi zoo.cfg //编辑配置文件,自定义dataDir
启动Server
> cd zookeeper-3.4.10/bin //切换到 bin目录
> ./zkServer.sh start //启动
Cli连接
> cd zookeeper-3.4.10/bin //切换到 bin目录
> ./zkCli.sh -server 127.0.0.1:2181
centos7
同mac,注意:如果服务器上有tomcat服务,需要将8080端口释放,不然启动zookeeper会出现
Error contacting service. It is probably not running.
kafka的环境搭建
修改server.properties中的配置
log.dirs=***********
zookeeper.connect=localhost:2181
启动kafka
cd /Users/zhouhao/soft/kafka/bin
./kafka-server-start.sh ../config/server.properties
后台启动方式
./kafka-server-start.sh -daemon ../config/server.properties
查看所有topic
./kafka-topics.sh --list --zookeeper localhost:2181