canal项目的介绍及源码请到项目主页:https://github.com/alibaba/canal 去查看。git
下载源码后,咱们打开目录看到的是以下一个目录结构。github
能够看出canal是一个基于maven构建的项目,它是由两级父子项目组成的项目群结构。正则表达式
该项目首先区分的是客户端项目组合、服务端项目组合和通用项目。数据库
上图是咱们服务端的各组件组成图,他们的基本介绍以下。服务器
instance下的子模块:网络
这些组件在项目代码中都有对应的子项目与之对应起来。所以咱们在看代码的时候就不会迷茫,大概知道其职责与其它项目的关系。jvm
该项目是链接canal的服务器接收数据变动的客户端组件包,应用可经过集成该包实如今应用中消费数据通道的变动,好比咱们能够在搜索引擎的索引变动应用中集成它,咱们还能够在将数据变动事件转化其它MQ消息的应用中集成它。maven
该项目是一个通用模块,它定义了整个canal项目群均可以使用的一些工具类(各类utils),全局的一些抽象接口(好比生命周期),通用技术组件(好比zookeeper的扩展类)和报警组件定义等等。工具
项目是通用网络协议模块,涉及到网络传输的项目均可以使用该模块。该模块目前定义了基于protobuf编码格式的网络通信消息协议。搜索引擎
MySQL协议的驱动程序,实现了MySQL的binlog复制网络协议的一些接口和类。
数据库复制包。定义了数据库复制的各类事件的接口及实现类。
该项目是一个事件过滤模块。定义了对于各类消息、事件的一些通用过滤接口及实现。支持的过滤实现包括正则表达式,el表达式,
该项目是各类使用场景的示例代码,帮助咱们快速上手使用canal。目前主要包含单机模式和集群模式的两种使用场景的示例代码。
接下来咱们看看cancal项目核心的类设计。