目前内部使用的同步,已經支援mysql5.x和oracle部分版本的日志解析
基于日志增量訂閱&消費支援的業務:
- 資料庫鏡像
- 資料庫實時備份
- 多級索引 (賣家和買家各自分庫索引)
- search build
- 業務cache重新整理
- 價格變化等重要業務消息
項目介紹
名稱:canal [kə'næl]
譯意: 水道/管道/溝渠
語言: 純java開發
定位: 基于資料庫增量日志解析,提供增量資料訂閱&消費,目前主要支援了mysql
工作原理
mysql主備複制實作
從上層來看,複制分成三步:
- master将改變記錄到二進制日志(binary log)中(這些記錄叫做二進制日志事件,binary log events,可以通過show binlog events進行檢視);
- slave将master的binary log events拷貝到它的中繼日志(relay log);
- slave重做中繼日志中的事件,将改變反映它自己的資料。
canal的工作原理:
原理相對比較簡單:
- canal模拟mysql slave的互動協定,僞裝自己為mysql slave,向mysql master發送dump協定
- mysql master收到dump請求,開始推送binary log給slave(也就是canal)
- canal解析binary log對象(原始為byte流)
-
架構
說明:
- server代表一個canal運作執行個體,對應于一個jvm
- instance對應于一個資料隊列 (1個server對應1..n個instance)
instance子產品:
- eventParser (資料源接入,模拟slave協定和master進行互動,協定解析)
- eventSink (Parser和Store連結器,進行資料過濾,加工,分發的工作)
- eventStore (資料存儲)
- metaManager (增量訂閱&消費資訊管理器)
- mysql的Binlay Log介紹
- http://dev.mysql.com/doc/refman/5.5/en/binary-log.html
- http://www.taobaodba.com/html/474_mysqls-binary-log_details.html
- 簡單點說:
- mysql的binlog是多檔案存儲,定位一個LogEvent需要通過binlog filename + binlog position,進行定位
-
mysql的binlog資料格式,按照生成的方式,主要分為:statement-based、row-based、mixed。
Java代碼
- mysql> show variables like 'binlog_format';
- +---------------+-------+
- | Variable_name | Value |
- +---------------+-------+
- | binlog_format | ROW |
- +---------------+-------+
- 1 row in set (0.00 sec)
- 目前canal隻能支援row模式的增量訂閱(statement隻有sql,沒有資料,是以無法擷取原始的變更日志)
原文章位址
https://blog.csdn.net/lvzhuyiyi/article/details/51842697