基于 MySQL 这种数据同步机制,那 Canal 的设计目标主要就是实现数据的同步,即数据的复制,从上面的图自然而然的想到了如下的设计:
原理相对比较简单:
-
canal 模拟 mysql slave 的交互协议,伪装自己为 mysql slave,向 mysql master 发送 dump 协议
-
mysql master 收到 dump 请求,开始推送 binary log 给 slave (canal)
-
canal解析 binary log 对象(原始为byte流)
接下来我们来看一下 Canale 的整体组成部分:
说明:
-
server代表一个canal运行实例,对应于一个jvm
-
instance对应于一个数据队列 (1个server对应1…n个instance)
instance模块:
-
eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)
-
eventSink (Parser和Store链接器,进行数据过滤,加工,分发的工作)
-
eventStore (数据存储)
-
metaManager (增量订阅&消费信息管理器)
这些组件我暂时不打算深入去研究,因为在目前这个阶段我自己也不清楚,但这个是我后续需要学习研究的重点。
3、在 IntelliJ IDEA 中运行 Canal Demo
在 Linux 环境中安装 canal 比较简单,大家可以安装官方手册一步一步操作即可,在这里我就不重复介绍,本节主要的目的是希望在开发工具中运行 Canal 的 Demo,以便后续在研究源码的过程中遇到难题时可以进行 Debug。
温馨提示:大家在学习过程中,可以根据官方文档先安装一遍 canal,对理解 Canal 的核心组件有着非常重要的帮助。
首先先从 canal 源码中寻找官方提供的 Demo,其示例代码在 example 包中,如下图所示:
但是另外稍微遗憾的是 canal 提供提供的示例代码中只包含了 client 端相关的代码,并没有包含服务端(server),故我们将目光放到其单元测试中,如下图所示:
接下来我根据官方的一些提示,结合自己的理解,