canal

canal

https://github.com/alibaba/canal
又一个阿里巴巴开源的数据同步工具
定位: 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql

基于日志增量订阅&消费支持的业务:

数据库镜像
数据库实时备份
多级索引 (卖家和买家各自分库索引)
search build
业务cache刷新
价格变化等重要业务消息

原理

  1. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
  2. mysql master收到dump请求,开始推送binary log给slave(也就是canal)
  3. canal解析binary log对象(原始为byte流)

说白了就是利用mysql的主从同步机制。这货伪装成一个slave节点,去读取binlog日志分析数据变更,进行同步操作。
基于生产者和消费者模型

如何使用

官方教程 https://github.com/alibaba/canal/wiki/Docker-QuickStart

老规矩用docker安装
docker pull canal/canal-server
运行镜像:
下载脚本
wget https://raw.githubusercontent.com/alibaba/canal/master/docker/run.sh
构建一个destination name为test的队列

sh run.sh -e canal.auto.scan=false \
		  -e canal.destinations=test \
		  -e canal.instance.master.address=127.0.0.1:3306  \
		  -e canal.instance.dbUsername=canal  \
		  -e canal.instance.dbPassword=canal  \
		  -e canal.instance.connectionCharset=UTF-8 \
		  -e canal.instance.tsdb.enable=true \
		  -e canal.instance.gtidon=false  \

和otter的区别

基于canal&otter的复制技术和mysql复制类似,具有类比性:

Canal对应于I/O thread,接收Master Binary Log;

Otter对应于SQL thread,通过Canal获取Binary Log数据,执行同步插入数据库;

你可能感兴趣的:(数据同步)