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

背景

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

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

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

  • 數據庫鏡像
  • 數據庫實時備份
  • 索引構建和實時維護(拆分異構索引、倒排索引等)
  • 業務 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),性能與功能層面有較大的突破,重要提高包括:python

文檔

多語言

canal 特別設計了 client-server 模式,交互協議使用 protobuf 3.0 , client 端可採用不一樣語言實現不一樣的消費邏輯,歡迎你們提交 pull requestmysql

canal 做爲 MySQL binlog 增量獲取和解析工具,可將變動記錄投遞到 MQ 系統中,好比 Kafka/RocketMQ,能夠藉助於 MQ 的多語言能力git

相關開源

問題反饋

其餘資料

相關文章
相關標籤/搜索