首頁>技術>

隨著業務發展,基於mysql的產品查詢已經無法滿足業務需求,研發團隊決定搭建基於elasticsearch的搜尋平臺,搭建搜尋平臺的關鍵點為mysql與elasticsearch的資料同步,研發團隊根據人員技術結構和業務邏輯結構對Maxwell、debezium和canal從功能、長期支援,開發定製等方面進行了技術選型比較。

a mysql-to-json kafka producer

Maxwell的守護程式讀取MySQL二進位制日誌並將行更新以JSON格式寫入到Kafka,Kinesis、RabbitMQ,Redis等流媒體平臺。Maxwell的操作開銷很低,只需要mysql和一個寫入位置即可。它的常見用例包括ETL,快取建立/過期,指標收集,搜尋索引和服務間通訊。Maxwell為您提供了事件來源的一些好處,而不必重新構建整個平臺(http://maxwells-daemon.io/)。

Maxwell設計初衷是一個從mysql到json的kafka生產者,同時支援同步mysql資料到Kinesis、RabbitMQ,Redis等流媒體平臺。

支援全量資料初始化偽裝為MySql Slave,接收binlog 資訊,然後根據schemas資訊拼裝JSON支援表過濾,表大欄位,資料加密和metrics指標監控支援MySql故障轉移,快速跟蹤和定位binlog位置Maxwell v1.29.1實現了客戶端HA(alpha),透過jgroups-raft對執行領導者選舉提供支援。

maxwells flow

stream changes from your database

Debezium是一個用於捕獲變更資料的開源分散式平臺。啟動它並將其指向您的資料庫,您的應用程式可以開始響應其他應用程式提交給資料庫的所有插入,更新和刪除操作。Debezium持久且快速,因此即使出現問題,您的應用程式也可以快速響應,並且不會錯過任何事件(https://debezium.io/)。

Debezium建立在Apache Kafka之上,並提供Kafka Connect相容聯結器,用於監視特定的資料庫管理系統。

Debezium支援Snapshot mode的方式進行全量資料同步Debezium服務支援的資料庫有MySQL、PostgreSQL、SQL server、Oracle、Mongodb,Cassandra,Db2,VitessDebezium將監視程序或聯結器分佈在多臺計算機上,以最大程度地降低資訊丟失的風險

Debezium CDC

阿里巴巴 MySQL binlog 增量訂閱&消費元件

canal [kə'næl],譯意為水道/管道/溝渠,主要用途是基於 MySQL 資料庫增量日誌解析,提供增量資料訂閱和消費(https://github.com/alibaba/canal)。

支援全量資料初始化和增量資料同步內建RDB、HBase、elasticsearch的adapter資料同步功能canal 偽裝自己為 MySQL slave ,向 MySQL master 傳送dump 協議透過zookeeper支援客戶端HA透過canal-admin支援WebUI的配置管理和節點運維

canal flow

透過以上技術分析,研發團隊最終採用canal作為資料同步工具,基本考量如下:

業務產品型別和更新頻率相對比較固定,不會有大的突發流量研發團隊整體技術架構比較簡單,基礎設施建設比較缺乏canal社群活躍,文件齊全,同時還有阿里的背書canal足夠輕量,研發團隊可以定製化開發,以滿足業務快速迭代的需要

29
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • springboot 教程(三)如何實現配置與環境隔離?