Canal探究
canal主要用途是基于 MySQL 数据库增量日志解析 , 提供增量数据订阅和消费 。
应用场景:
- 异构数据同步
- 数据库实时备份
- 业务cache刷新
文章插图
slave同步master原理:
- master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件 , binary log events , 可以通过show binlog events进行查看)
- slave将binary log events拷贝到它的中继日志(relay log)
- slave重做中继日志中的事件 , 将改变反映它自己的数据
文章插图
架构
文章插图
server代表一个canal运行实例 , 对应于一个jvm
instance对应一个数据队列 , 一个destination , 相当于一个数据库实例变更的监听 , 1个server对应1-n个instance
instance模块:
- eventParser (数据源接入 , 模拟slave协议和master进行交互 , 协议解析)
- eventSink (Parser和Store链接器 , 进行数据过滤 , 加工 , 分发的工作)
- eventStore (数据存储)
- metaManager (增量订阅 --tt-darkmode-bgcolor: #131313;">EventParser
文章插图
- Connection获取上一次解析成功的位置 (如果第一次启动 , 则获取初始指定的位置或者是当前数据库的binlog位点)
- Connection建立链接 , 发送BINLOG_DUMP指令
- Mysql开始推送Binaly Log
- 接收到的Binaly Log的通过Binlog parser进行协议解析 , 补充一些特定信息
- 传递给EventSink模块进行数据存储 , 是一个阻塞操作 , 直到存储成功
- 存储成功后 , 定时记录Binaly Log位置
文章插图
- 数据过滤:支持通配符的过滤模式 , 表名 , 字段内容等
- 数据路由/分发:解决1:n (1个parser对应多个store的模式)
- 数据归并:解决n:1 (多个parser对应1个store)
- 数据加工:在进入store之前进行额外的处理 , 比如join
文章插图
Instance设计
文章插图
instance代表了一个实际运行的数据队列 , 包括了EventPaser,EventSink,EventStore等组件 。 抽象了CanalInstanceGenerator , 主要是考虑配置的管理方式:
- manager方式:提供http方式 , 可以和公司内部web console/manager系统进行对接 。
- spring方式:基于spring xml + properties进行定义 , 通过spring配置
- xxxx-instance.xml (canal组件的配置定义 , 可以在多个instance配置中共享 , 在canal.properties中配置)
- xxxx.properties (每个instance通道都有各自一份定义 , 因为每个mysql的ip , 帐号 , 密码等信息不会相同)
推荐阅读
- Canalys公布Q3国内手机出货量 小米逆势增长排名第四
- iOS虚拟定位技术探究
- 因为一次redis缓存穿透,全面探究redis能做什么
- 隐匿在语音识别背后的智能音箱之战
- 阿里P8带你深入看源码,探究多线程原理,只靠这份384页笔记
- 创业邦|2020凤凰网科技创新趋势论坛正式召开,探究中国科技力量崛起之路
- 一个神烦取名字的IT人|区块链技术在食品溯源领域的应用探究