canalBinlog 的增量訂閱和消費(fèi)組件
canal 是阿里巴巴 MySQL 數(shù)據(jù)庫 Binlog 的增量訂閱&消費(fèi)組件。
名稱:canal [k?'næl]
譯意: 水道/管道/溝渠
語言: 純java開發(fā)
定位: 基于數(shù)據(jù)庫增量日志解析,提供增量數(shù)據(jù)訂閱&消費(fèi),目前主要支持了MySQL
早期,阿里巴巴 B2B 公司因?yàn)榇嬖诤贾莺兔绹p機(jī)房部署,存在跨機(jī)房同步的業(yè)務(wù)需求。不過早期的數(shù)據(jù)庫同步業(yè)務(wù),主要是基于 trigger 的方式獲取增量 變更,不過從 2010 年開始,阿里系公司開始逐步的嘗試基于數(shù)據(jù)庫的日志解析,獲取增量變更進(jìn)行同步,由此衍生出了增量訂閱&消費(fèi)的業(yè)務(wù),從此開 啟了一段新紀(jì)元。ps. 目前內(nèi)部使用的同步,已經(jīng)支持 MySQL 5.x 和 Oracle 部分版本的日志解析
基于日志增量訂閱&消費(fèi)支持的業(yè)務(wù):
-
數(shù)據(jù)庫鏡像
-
數(shù)據(jù)庫實(shí)時(shí)備份
-
多級索引 (賣家和買家各自分庫索引)
-
search build
-
業(yè)務(wù)cache刷新
-
價(jià)格變化等重要業(yè)務(wù)消息
Canal 工作原理:
原理相對比較簡單:
-
canal模擬mysql slave的交互協(xié)議,偽裝自己為mysql slave,向mysql master發(fā)送dump協(xié)議
-
mysql master收到dump請求,開始推送binary log給slave(也就是canal)
-
canal解析binary log對象(原始為byte流)
