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項目核心的類設計。

相關文章
相關標籤/搜索