背景
早期,阿里巴巴 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
相關開源
問題反饋
其餘資料