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