目录
上文已经介绍过canal的基本安装和使用,现在来看看canal的实现原理吧。
1原理
首先看一张图,这是canal官网上的mysql master-slave原理图。canal就是将自己伪装成slave,所以原理类似。

1.Mysql-master 将数据变更保存到 二进制日志Binary log中。
2.canal将自己伪装成Mysql的一台备机,向MySQL master 发送dump 协议。
3.Mysql-master 将二进制日志发送给canal。
4.canal-server将变二进制日志进行解析,同时写入本地内存中。
5.canal-client 向canal-server申请读取相应的增量数据,读取到数据后进行操作(发送ES,发送kafka消费等)。
6.canal-client 消费完成后,向canal-server 发送ack 确认消费请求。
7.canal-server 收到ack确认消费请求后,将已经消费的数据从内存中移除。
2.整体架构

上图是一个独立部署的deploy canal-server. 存在2个instance分别监控2个不同的DB.有2个不同的canal-client对canal-server进行订阅。client和server通过protocol协议进行数据传输。
2.重点解释
2.1 instance
instance既实例,每一个instance都会对应一条配置规则 比如:test1实例监控192.168.1.3:3306 ,test2实例监控192.168.1.4:3306 .等于一个instance就会模拟成一个Mysql-slave。核心接口:CanalInstance
每个实例都会将读取到的binary log 解析并写入内存中。供客户端消费,都是单独维护自己的环形队列。
一个instance包含以下模块:
eventParser:数据接入,

本文深入探讨了Canal的工作原理,包括它如何伪装成MySQL的从库,从MySQL主库接收二进制日志,解析并存储在内存中,以及Canal Server和Client之间的交互。Canal的整体架构由instance、eventParser、eventSink、eventStore等组件构成,用于数据接入、过滤、存储和分发。此外,文章还讨论了server和client的集群关系,以及不同Spring配置文件的区别,强调了数据存储在内存中的环形队列eventStore中的实现。
最低0.47元/天 解锁文章
21万+

被折叠的 条评论
为什么被折叠?



