整體架構
說明
server:對應于一個jvm,管理多個instance,提供服務
instance:偽裝成一個slave,從mysql dump數(shù)據(jù)
eventParser (數(shù)據(jù)源接入,模擬slave協(xié)議和master進行交互,協(xié)議解析)
eventSink (Parser和Store鏈接器,進行數(shù)據(jù)過濾释移,加工腥沽,分發(fā)的工作)
eventStore (數(shù)據(jù)存儲)
metaManager (增量訂閱&消費信息管理器)
server
為了方便組件化使用箱季,特意抽象了Embeded(嵌入式) / Netty(網(wǎng)絡訪問)的兩種實現(xiàn)
Embeded:消費端直接本地嵌入,無需單獨部署canal服務
Netty: 獨立部署,提供netty服務,消費端遠程抓取
instance
instance的兩種配置方式
1.本地spring配置实愚,默認為此方式---Manager
2.遠程讀取配置,需要自己實現(xiàn)---Spring
eventParser
整個parser過程大致可分為幾步:
Connection獲取上一次解析成功的位置 (如果第一次啟動满败,則獲取初始指定的位置或者是當前數(shù)據(jù)庫的binlog位點)
Connection建立鏈接,發(fā)送BINLOG_DUMP指令
// 0. write command number
// 1. write 4 bytes bin-log position to start at
// 2. write 2 bytes bin-log flags
// 3. write 4 bytes server id of the slave
// 4. write bin-log file name
Mysql開始推送Binaly Log
接收到的Binaly Log的通過Binlog parser進行協(xié)議解析叹括,補充一些特定信息
// 補充字段名字算墨,字段類型,主鍵信息汁雷,unsigned類型處理
傳遞給EventSink模塊進行數(shù)據(jù)存儲净嘀,是一個阻塞操作,直到存儲成功
存儲成功后侠讯,定時記錄Binaly Log位置