1 概述
- canal [kə’næl],译意为水道/管道/沟渠。
- 是阿里巴巴旗下的一款开源项目,纯Java开发。
- 基于数据库增量日志解析,提供增量数据订阅&消费主要用途是基于 MySQL 数据库增量日志解析,目前主要支持mysql。
2 优缺点
- 优点:
与业务代码完全解耦,API完全解耦,异步处理,且可以做到准实时,用着很舒服;
- 缺点:
- 开启Binlog后,对数据库会产生额外的开销,性能会受到影响;
- canal是第三方实现的,需要学习成本(学无止尽,技多不压身);
2 常用场景
- Canal 是阿里 Otter 中间件的一部分,Otter是阿里用于进行异地数据库之间的同步框架;
- 用来更新缓存,减少实时数据同步的DB压力;
- 抓取业务数据新增变化表,用于制作拉链表;
- 抓取业务表的新增变化数据,用于制作实时统计;
3 工作原理
Mysql的Binlog 记录了所有的 DDL 和 DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间。主要用来备份和数据同步。 Canal 主要是基于 Binlog 的一项技术。
在mysql中开启binlog日志记录,完成主从复制。
canal 会伪装(实现了mysql的binlog日志的传输协议)为 mysql的一个从机实例! 向mysql的主机发送dump请求。
主机将binlog日志发送给canal,有canal解析,解析后,可以发送到任意地方。
Binlog 有三种模式:STATEMENT、ROW、MIXED- STATEMENT 记录的是执行的sql语句。
- ROW 记录的是真实的行数据记录。
- MIXED 记录的是1+2,优先按照1的模式记录。
(关于 Binlog 的部分不做过多阐述,有兴趣的自行百度下,下面进入正文)
4 快速开始
4.1 准备
4.1.1 开启 mysql 的 Binlog
详细见我写的另一篇文章内容:《Mysql 数据库开启 binlog》
4.1.2 下载 Canal 文件包
官方下载地址:https://github.com/alibaba/canal/releases
(本次下载的 canal 是版本号为:1.1.6)
解压后得到如下文件夹
4.1.3 修改配置文件
进入到 conf\example文件加下,修改 instance.properties 配置
#position info,需要改成自己的数据库信息
canal.instance.master.address = 127.0.0.1:3306
canal.instance.master.journal.name =
canal.instance.master.position =
canal.instance.master.timestamp =
#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
# username/password,需要改成自己的数据库信息
canal.instance.dbUsername=root
canal.instance.dbPassword=root
canal.instance.connectionCharset = UTF-8
#table regex 数据库表的过滤
canal.instance.filter.regex=canal_test.*
4.1.4 启动 Canal
./bin/startup.sh