Canal - 數據同步 - 阿里巴巴 MySQL binlog 增量訂閱&消費組件


背景

早期,阿里巴巴 B2B 公司因為存在杭州和美國雙機房部署,存在跨機房同步的業務需求 ,主要是基於trigger的方式獲取增量變更。從 2010 年開始,公司開始逐步嘗試數據庫日志解析,獲取增量變更進行同步,由此衍生出了增量訂閱和消費業務,從此開啟一段新紀元。

當前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

基於日志增量訂閱和消費的業務包括

  • 數據庫鏡像
  • 數據庫實時備份
  • 索引構建和實時維護(拆分異構索引、倒排索引等)
  • 業務 cache 刷新
  • 帶業務邏輯的增量數據處理

項目介紹

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

譯意: 水道/管道/溝渠

產品定位: 基於數據庫增量日志解析,提供增量數據訂閱和消費

關鍵詞: MySQL binlog parser / real-time / queue&topic / index build

工作原理

MySQL主備復制原理

  • MySQL master 將數據變更寫入二進制日志( binary log, 其中記錄叫做二進制日志事件binary log events,可以通過 show binlog events 進行查看)
  • MySQL slave 將 master 的 binary log events 拷貝到它的中繼日志(relay log)
  • MySQL slave 重放 relay log 中事件,將數據變更反映它自己的數據

canal 工作原理

  • canal 模擬 MySQL slave 的交互協議,偽裝自己為 MySQL slave ,向 MySQL master 發送dump 協議
  • MySQL master 收到 dump 請求,開始推送 binary log 給 slave (即 canal )
  • canal 解析 binary log 對象(原始為 byte 流)

重要版本更新說明

canal 1.1.x 版本(release_note),性能與功能層面有較大的突破,重要提升包括:

文檔

多語言

canal 特別設計了 client-server 模式,交互協議使用 protobuf 3.0 , client 端可采用不同語言實現不同的消費邏輯,歡迎大家提交 pull request

canal 作為 MySQL binlog 增量獲取和解析工具,可將變更記錄投遞到 MQ 系統中,比如 Kafka/RocketMQ,可以借助於 MQ 的多語言能力

相關開源

問題反饋

其他資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM