背景
早期,阿里巴巴 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),性能與功能層面有較大的突破,重要提升包括:
- 整體性能測試&優化,提升了150%. #726 參考: Performance
- 原生支持prometheus監控 #765 Prometheus QuickStart
- 原生支持kafka消息投遞 #695 Canal Kafka/RocketMQ QuickStart
- 原生支持aliyun rds的binlog訂閱 (解決自動主備切換/oss binlog離線解析) 參考: Aliyun RDS QuickStart
- 原生支持docker鏡像 #801 參考: Docker QuickStart
文檔
- Home
- Introduction
- QuickStart
- AdminGuide
- ClientExample
- ClientAPI
- Performance
- DevGuide
- BinlogChange(MySQL 5.6)
- BinlogChange(MariaDB)
- TableMetaTSDB
- ReleaseNotes
- Download
- FAQ
多語言
canal 特別設計了 client-server 模式,交互協議使用 protobuf 3.0 , client 端可采用不同語言實現不同的消費邏輯,歡迎大家提交 pull request
- canal java 客戶端: https://github.com/alibaba/canal/wiki/ClientExample
- canal c# 客戶端: https://github.com/dotnetcore/CanalSharp
- canal go客戶端: https://github.com/CanalClient/canal-go
- canal php客戶端: https://github.com/xingwenge/canal-php
- canal Python客戶端:https://github.com/haozi3156666/canal-python
canal 作為 MySQL binlog 增量獲取和解析工具,可將變更記錄投遞到 MQ 系統中,比如 Kafka/RocketMQ,可以借助於 MQ 的多語言能力
相關開源
問題反饋
- 郵件: jianghang115@gmail.com
- 報告 issue: github issues