canal的工作原理类似mysql主从同步原理
先看下mysql主从同步的原理:
分成三步:
1、master将变更同步到二进制日志(binary log)文件中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);
2、slave将master的binary log events拷贝到它的中继日志(relay log);
3、slave解析中继日志中的事件,解析成自己本身的数据。
canal工作原理:
1、canal模拟MySQL slave的交互协议,伪装自己为MySQL slave,向MySQL master发送dump协议
2、MySQL master收到dump协议请求,开始推送binary log 给canal
3、canal解析binary log对象(原始为byte流)
架构:
上图说明:
server:一个canal运行实例,对应一个jvm
实例对应一个数据队列(1个server对应1-n个实例)
instance模块:
- EventParser:数据源接入,协议解析,模拟slave协议和master进行交互
- EventSink:Paser和Store连接器,进行数据过滤,加工,分发
- EventStore:数据存储
- metaManager:增量订阅&消费信息管理器