在前面两篇中,我们从基本概念理解了canal是一个什么项目,能应用于什么场景,然后通过一个demo体验,有了基本的体感和认识。 从这一篇开始,我们将从源码入手,深入学习canal的实现方式。了解canal相关功能的实现方式,其中有很多机制
在前面两篇中,我们从基本概念理解了canal是一个什么项目,能应用于什么场景,然后通过一个demo体验,有了基本的体感和认识。
从这一篇开始,我们将从源码入手,深入学习canal的实现方式。了解canal相关功能的实现方式,其中有很多机制是非常值得深入了解的,从代码角度实现角度去学习实时数据订阅与同步的实现与核心技术点。当然,如果要在生产中使用这个开源项目,了解源码更是必不可少,是解决问题和新特性定制的前提条件。
本文使用的版本是1.1.4,这也是笔者写这篇博客时的最新稳定版。
下载源码
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
canal项目是基于Maven构建的,将不同的功能模块划分了不同的子模块。
我们可以简单执行可执行模块deployer,也可以将模块通过maven依赖的方式,将你需要的子模块引入到你自己的项目中进行使用开发。
简单介绍下核心模块的功能:
那这些模块之间是如何组织、如何关联的呢?
我们从整体到局部来看一下。
整体架构关联,包括admin模块、server模块、client-adapter模块
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模块。
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知识图谱:https://github.com/saigu/JavaKnowledgeGraph(历史文章查阅非常方便)
--结束END--
本文标题: 「从零单排canal 03」 canal源码分析大纲
本文链接: https://lsjlt.com/news/6837.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0