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

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

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依赖的方式,将你需要的子模块引入到你自己的项目中进行使用开发。


99.jpg


简单介绍下核心模块的功能:


  • 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模块。


100.jpg


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的配置信息。


CanalServer模块局部关系,包括deployer模块、server模块、instance模块、parser模块、sink模块、store模块、meta模块、client模块。

101.jpg


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的消息事件。


目录
相关文章
|
1月前
|
消息中间件 存储 Java
Kafka核心知识点整理,收藏再看!
Kafka核心知识点整理,收藏再看!
Kafka核心知识点整理,收藏再看!
|
6月前
|
消息中间件 存储 设计模式
Kafka原理篇:图解kakfa架构原理
Kafka原理篇:图解kakfa架构原理
498 1
|
4月前
|
API
【想进大厂还不会阅读源码】ShenYu源码-替换ZooKeeper客户端
ShenYu源码阅读。相信大家碰到源码时经常无从下手,不知道从哪开始阅读😭。我认为有一种办法可以解决大家的困扰!至此,我们发现自己开始从大量堆砌的源码中脱离开来😀。ShenYu是一个异步的,高性能的,跨语言的,响应式的 API 网关。
|
6月前
|
消息中间件 JSON Kafka
【十九】初学Kafka并实战整合SpringCloudStream进行使用
【十九】初学Kafka并实战整合SpringCloudStream进行使用
124 1
【十九】初学Kafka并实战整合SpringCloudStream进行使用
|
6月前
|
消息中间件 Kafka API
这些年背过的面试题——Kafka篇
本文是技术人面试系列Kafka篇,面试中关于Kafka都需要了解哪些基础?一文带你详细了解,欢迎收藏!
深入浅出阿里数据同步神器:Canal原理+配置+实战全网最全解析!
canal 翻译为管道,主要用途是基于 MySQL 数据库的增量日志 Binlog 解析,提供增量数据订阅和消费。 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
|
消息中间件 数据采集 存储
Kafka架构介绍|青训营笔记
本文主要讲解了kafka作为分布式消息队列的整体架构,主要从:1.zookeeper;2.broker;3.controller选举;4.coorinator进行介绍
181 0
Kafka架构介绍|青训营笔记
|
消息中间件 存储 缓存
【修正版】7张图带你轻松入门RocketMQ
【修正版】7张图带你轻松入门RocketMQ
107 0
【修正版】7张图带你轻松入门RocketMQ
|
消息中间件 存储 数据管理
精华!一张图进阶 RocketMQ
一张图进阶 RocketMQ:通过一张图将零散的知识点连接起来,让我们对 RocketMQ 有更深入、更系统的理解。
328 1
|
canal 消息中间件 存储
从零单排canal 01」 canal 10分钟入门(基于1.1.4版本)
从零单排canal 01」 canal 10分钟入门(基于1.1.4版本)
483 1
从零单排canal 01」 canal 10分钟入门(基于1.1.4版本)