canal源码分析——项目组成结构

背景

canal项目的介绍及源码请到项目主页:https://github.com/alibaba/canal 去查看。git

项目结构初探

下载源码后,咱们打开目录看到的是以下一个目录结构。github

能够看出canal是一个基于maven构建的项目,它是由两级父子项目组成的项目群结构。正则表达式

该项目首先区分的是客户端项目组合、服务端项目组合和通用项目。数据库

项目详细介绍

服务端项目

上图是咱们服务端的各组件组成图,他们的基本介绍以下。服务器

 

  • server表明一个canal服务端的运行实例,对应于一个jvm。
  • instance对应于一个数据队列 (1个server对应1..n个instance)

instance下的子模块:网络

  • eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)
  • eventSink (Parser和Store连接器,进行数据过滤,加工,分发的工做)
  • eventStore (数据存储)
  • metaManager (增量订阅&消费信息管理器)

这些组件在项目代码中都有对应的子项目与之对应起来。所以咱们在看代码的时候就不会迷茫,大概知道其职责与其它项目的关系。jvm

 

客户端项目

client

该项目是链接canal的服务器接收数据变动的客户端组件包,应用可经过集成该包实如今应用中消费数据通道的变动,好比咱们能够在搜索引擎的索引变动应用中集成它,咱们还能够在将数据变动事件转化其它MQ消息的应用中集成它。maven

 

通用项目

common

该项目是一个通用模块,它定义了整个canal项目群均可以使用的一些工具类(各类utils),全局的一些抽象接口(好比生命周期),通用技术组件(好比zookeeper的扩展类)和报警组件定义等等。工具

protocol

项目是通用网络协议模块,涉及到网络传输的项目均可以使用该模块。该模块目前定义了基于protobuf编码格式的网络通信消息协议。搜索引擎

driver

MySQL协议的驱动程序,实现了MySQL的binlog复制网络协议的一些接口和类。

dbsync

数据库复制包。定义了数据库复制的各类事件的接口及实现类。

filter

该项目是一个事件过滤模块。定义了对于各类消息、事件的一些通用过滤接口及实现。支持的过滤实现包括正则表达式,el表达式,

 

使用示例项目

example

该项目是各类使用场景的示例代码,帮助咱们快速上手使用canal。目前主要包含单机模式和集群模式的两种使用场景的示例代码。

项目间关系

 

接下来咱们看看cancal项目核心的类设计。

相关文章
相关标签/搜索