Canal
简介
Canal是阿里开源的根据MySQL数据库binary Log增量订阅&消费的组件
定位:基于对数据库日志的解析,提供增量数据订阅&消费,开源部分支持MySQL(也支持mariaDB),阿里内部已支持Oracle的解析。
个人理解:监听日志,模拟slave,将数据同步到其他存储中
常见作用:
- 数据库镜像
- 数据库实时备份
- 业务cache刷新
原理
Canal基本原理
- canal server模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql slave发送dump协议。
- mysql master收到dump请求,开始推送binary log给slave(也就是canal)
- canal server解析binary log对象(原始为byte流)
MySQL数据库主从复制原理
- master将操作记录到二进制日志(binary log)中(二进制日志事件,binary log events,可以通过show binlog events进行查看);
- slave将master的binary log events拷贝到它的中继日志(relay log);slave解析中继日志后,执行新加入的操作,将改变反映到slave自己的数据中。
应用架构
- Canal包含Canal Server和Canal Client
- 其中Canal Server中包含多个Canal Instance
- 每个Canal Instance对应一个MySQL Instance和一个Canal Client
整体结构
- Canal Server代表一个Canal运行实例,对应一个JVM。
- instance对应于一个数据队列(1个server对应1…n个instance)
- Instance子模块
- eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)
- eventSink (Parser和Store链接器,进行数据过滤,加工,分发的工作)
- eventStore (数据存储)
- metaManager (增量订阅&消费信息管理器)