「从零单排canal 03」 canal源码分析大纲

在前面两篇中,我们从基本概念理解了canal是一个什么项目,能应用于什么场景,然后通过一个demo体验,有了基本的体感和熟悉。

从这一篇最先,我们将从源码入手,深入学习canal的实现方式。领会canal相关功效的实现方式,其中有许多机制是异常值得深入领会的,从代码实现角度去学习实时数据订阅与同步的实现与焦点技术点。固然,若是要在生产中使用这个开源项目,领会源码更是必不可少,是解决问题和新特征定制的前提条件。

本文使用的版本是1.1.4,这也是笔者写这篇博客时的最新稳定版。

1.准备工作

下载源码

git clone https://github.com/alibaba/canal.git

切换到1.1.4这个tag

git checkout canal-1.1.4

 

或者可以关注我的源码注释版本(正在不断更新中)
https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_reading/canal

2.canal项目模块先容

canal项目是基于maven构建的,将差别的功效模块划分了差别的子模块。

我们可以简朴执行可执行模块deployer,也可以将模块通过maven依赖的方式,将你需要的子模块引入到你自己的项目中举行使用开发。

「从零单排canal 03」 canal源码分析大纲

 

简朴先容下焦点模块的功效:

  • deployer模块:自力部署模块,用于canal-server的自力启动,包罗内陆设置剖析、拉取远程设置、启动canal-server。
  • server模块:canal-server的实现逻辑,一个canal-server一样平常是一个jvm历程。重点关注两种canal-server的实现方式,内嵌型的canalServerEmbed和自力使用的canalServerWithNetty。新版本中新增了直接对接mq的canal-server实现。
  • instance模块:详细实时订阅义务是由一个个instance组成的,每个canal-server中可以同时运行多个instance。instance由parser、sink、store三个重点模块组成。
  • parser模块:数据源接入,模拟slave协媾和master举行交互,协议剖析。parser模块依赖于dbsync、driver模块。
  • sink模块:将parser抓取到的数据,举行过滤,加工,然后发送到store模块举行存储。焦点接口为CanalEventSink。
  • store模块:数据存储模块,类似内存模式到新闻行列,本质上是一个RingBuffer。焦点接口为CanalEventStore。
  • meta模块:增量订阅&消费信息治理器,焦点接口为CanalMetaManager,主要用于纪录canal消费到的mysql binlog的位置
  • client模块:项目最早的消费客户端,通过将client模块引入自己的项目中,然后直接消费canal-server获取的数据。
  • client-adapter模块:1.1.x后新出的模块,可以自力部署为canal-server的消费服务端,是一个springboot项目。通过SPI机制,能够加载差别plugins,将消费信息投递到ES\hbase\rdb等下游。
  • admin模块:1.1.x新出的模块,可以自力部署为canal-server的控制台,设置canal-server、instance相关设置,异常好用。

3.模块关联

那这些模块之间是若何组织、若何关联的呢?

我们从整体到局部来看一下。

整体架构关联,包罗admin模块、server模块、client-adapter模块

「从零单排canal 03」 canal源码分析大纲

 

pycharm连接远程服务器

1)server模块是服务端焦点模块,用来拉取binlog的实时调换,然后投递到客户端。

2)server可以通过设置,选择投递到MQ,或者是启动一个netty,让客户端来拉取。

3)client-adapter就是一个自力部署到服务,可以直接拉取canal-server的新闻(或者拉取mq的新闻),转发到对应RDS/Redis/HBase,固然,你也可以自己实现一个转发到redis的adapter

4)admin模块是治理控制台,可以调剂canal-server组成一个个集群实现instance的高可用、可以更改server、instance的设置信息。

Canal-server模块局部关系,包罗deployer模块、server模块、instance模块、parser模块、sink模块、store模块、meta模块、client模块。

「从零单排canal 03」 canal源码分析大纲

 

1)deployer模块是一个启动模块,可以启动canal-server。

2)一个server是一个自力应用,是一个jvm历程,内里可以有多个instance工具。

3)instance内包罗了parser、sink、store、meta

4)parser卖力获取binlog调换,然后sink将parser获取的binlog调换转换为event,存入store。

5)meta是元信息治理器

6)client模块可以内嵌入你的应用,用来消费canal-server的新闻事宜。

基本上焦点模块的关系就是这样了,后续会根据模块的维度举行源码剖析,敬请期待。

 

都看到最后了,原创不易,点个关注,点个赞吧~

文章连续更新,可以微信搜索「阿丸条记 」第一时间阅读,回复关键字【学习】有我准备的一线大厂面试资料。

知识碎片重新梳理,构建Java知识图谱:
github.com/saigu/JavaK…(历史文章查阅异常利便)

 

原创文章,作者:28x29新闻网,如若转载,请注明出处:https://www.28x29.com/archives/17673.html