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

原文:http://my.oschina.net/ywbrj042/blog/637489
摘要
canal是阿里巴巴mysql数据库binlog的增量订阅&消费组件,在以下使用场景中都可以使用。 数据库镜像、数据库实时备份、多级索引 (卖家和买家各自分库索引)、search build、业务cache刷新、价格变化等重要业务消息 本系列文章将开始对该项目进行源码分析,本文将从高层分析canal产品的各子项目的职责及它们之间的关系。

背景

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

项目结构初探

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

可以看出canal是一个基于maven构建的项目,它是由两级父子项目组成的项目群结构。

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

项目详细介绍

服务端项目

canal源码分析——项目组成结构_第1张图片

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

 

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

instance下的子模块:

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

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

 

客户端项目

client

该项目是连接canal的服务器接收数据变更的客户端组件包,应用可通过集成该包实现在应用中消费数据通道的变更,比如我们可以在搜索引擎的索引变更应用中集成它,我们还可以在将数据变更事件转化其它MQ消息的应用中集成它。

 

通用项目

common

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

protocol

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

driver

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

dbsync

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

filter

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

 

使用示例项目

example

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

项目间关系

canal源码分析——项目组成结构_第2张图片

 

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

你可能感兴趣的:(canal源码分析——项目组成结构)