簡介
文章開頭先介紹一下什么是CDC。數據準實時復制(CDC)是目前行內實時數據需求大量使用的技術。常用的中間件有Canal、Debezium、Flink CDC等
下面我們做一下對比
各有優缺點吧,本主要介紹一下Debezium中間件。
Debezium是什么
Debezium是一個為變更數據捕獲(CDC)提供低延遲數據流平臺的開源項目。Debezium是一個將來自現有數據庫的信息轉換為事件流的分布式平臺,使應用程序能夠檢測并立即響應數據庫中的行級更改。
Debezium構建在Apache Kafka之上,并提供了一組Kafka Connect兼容的連接器。每個連接器都與特定的數據庫管理系統(DBMS)一起工作。連接器通過檢測發生的變化來記錄DBMS中數據變化的歷史,并將每個變化事件的記錄流式傳輸到Kafka Topic。然后,消費應用程序可以從Kafka主題中讀取結果事件記錄。通過利用Kafka可靠的流媒體平臺,Debezium使應用程序能夠正確和完整地消費數據庫中發生的更改。即使您的應用程序意外停止或失去連接,它也不會錯過停機期間發生的事件。應用程序重新啟動后,它將從停止的位置繼續從主題讀取。
注:本文只討論Debezium構建在kafka之上。
Kafka Connect架構
最常見的是通過Apache kafka connect部署Debezium。Kafka Connect是一個框架和運行時,用于實現和操作:
- 源連接器,如Debezium,將記錄發送到Kafka
- 接收連接器,將記錄從Kafka主題傳播到其他系統
下圖顯示了基于Debezium的變更數據捕獲管道的架構:
?
如圖所示,部署了用于MySQL和PostgresSQL的Debezium連接器來捕獲對這兩種數據庫的更改。每個Debezium連接器建立一個到其源數據庫的連接:
- MySQL連接器使用一個客戶端庫來訪問binlog。
- PostgreSQL連接器從邏輯復制流中讀取數據。
Kafka Connect作為Kafka代理之外的一個獨立服務運行。
默認情況下,一個數據庫表的更改被寫入Kafka主題,其名稱對應于表名。如果需要,您可以通過配置Debezium的主題路由轉換來調整目標主題名稱。例如,您可以:
- 將記錄路由到名稱與表名不同的主題
- 將多個表的更改事件記錄流式傳輸到單個主題中
在Apache Kafka中更改事件記錄后,Kafka Connect生態系統中的不同連接器可以將記錄流式傳輸到其他系統和數據庫,如Elasticsearch,數據倉庫和分析系統,或緩存,如Infinispan