天天看點

canal源碼分析——整體架構分析項目介紹架構

 目前内部使用的同步,已經支援mysql5.x和oracle部分版本的日志解析

基于日志增量訂閱&消費支援的業務:

  1. 資料庫鏡像
  2. 資料庫實時備份
  3. 多級索引 (賣家和買家各自分庫索引)
  4. search build
  5. 業務cache重新整理
  6. 價格變化等重要業務消息

項目介紹

   名稱:canal [kə'næl]

   譯意: 水道/管道/溝渠 

   語言: 純java開發

   定位: 基于資料庫增量日志解析,提供增量資料訂閱&消費,目前主要支援了mysql

工作原理

mysql主備複制實作

canal源碼分析——整體架構分析項目介紹架構

從上層來看,複制分成三步:

  1. master将改變記錄到二進制日志(binary log)中(這些記錄叫做二進制日志事件,binary log events,可以通過show binlog events進行檢視);
  2. slave将master的binary log events拷貝到它的中繼日志(relay log);
  3. slave重做中繼日志中的事件,将改變反映它自己的資料。

canal的工作原理:

canal源碼分析——整體架構分析項目介紹架構

原理相對比較簡單:

  1. canal模拟mysql slave的互動協定,僞裝自己為mysql slave,向mysql master發送dump協定
  2. mysql master收到dump請求,開始推送binary log給slave(也就是canal)
  3. canal解析binary log對象(原始為byte流)
  4. 架構

canal源碼分析——整體架構分析項目介紹架構

說明:

  • 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代碼  

    canal源碼分析——整體架構分析項目介紹架構
    1. mysql> show variables like 'binlog_format';  
    2. +---------------+-------+  
    3. | Variable_name | Value |  
    4. +---------------+-------+  
    5. | binlog_format | ROW   |  
    6. +---------------+-------+  
    7. 1 row in set (0.00 sec)  
  • 目前canal隻能支援row模式的增量訂閱(statement隻有sql,沒有資料,是以無法擷取原始的變更日志)

原文章位址

https://blog.csdn.net/lvzhuyiyi/article/details/51842697