作者:admin 日期:2023-09-06 瀏覽: 次
實時監視同步數據庫變更,這個框架真是神器
我們數據庫中的數據一直在變化,有時候我們希望能監聽數據庫數據的變化并根據變化做出一些反應,比如更新對應變化數據的緩存、增量同步到其它數據源、對數據進行檢測和審計等等。而這種技術就叫變更數據捕獲(Change Data Capture)。對于這種技術我們可能知道一個國內比較知名的框架Canal,非常好用!但是Canal有一個局限性就是只能用于Mysql的變更數據捕獲。今天來介紹另一種更加強大的分布式CDC框架Debezium。
提起Debezium這個框架,相信大多數普通開發者都比較陌生,但是提及它所屬的公司大家一定不會陌生。紅帽公司
沒錯就是開源界最成功的紅帽公司。Debezium是為捕獲數據更改的流式處理框架,開源免費。Debezium近乎實時地監控數據庫行級別(row-level)的數據變更,并針對變更可以做出反應。而且只有已提交的變更才是可見的,所以不用擔心事務問題或者更改被回滾的問題。Debezium為所有的數據庫更改事件提供了一個統一的模型,所以不用擔心每種數據庫系統的復雜性。Debezium提供了對MongoDB、MySQL、PostgreSQL、SQL Server、Oracle、DB2等數據庫的支持。
另外借助于Kafka Connector可以開發出一個基于事件流的變更捕獲平臺,具有高容錯率和極強的擴展性。Debezium Kafka 架構
如圖所示,部署了用于 MySQL 和 PostgresSQL 的 Debezium Kafka連接器以捕獲對這兩種類型數據庫的更改事件,然后將這些更改通過下游的Kafka Connector將記錄傳輸到其他系統或者數據庫(例如 Elasticsearch、數據倉庫、分析系統)或緩存。
另一種玩法就是將Debezium內置到應用程序中,來做一個類似消息總線的設施,將數據變更事件傳遞給訂閱的下游系統中。Debezium內置服務器架構
Debezium對數據的完整性和可用性也是做了不少的工作。Debezium用持久化的、有副本備份的日志來記錄數據庫數據變化的歷史,因此,你的應用可以隨時停止再重啟,而不會錯過它停止運行時發生的事件,保證了所有的事件都能被正確地、完全地處理掉。?
稍后我會演示一個Spring Boot集成Debezium的數據捕獲系統。
理論介紹并不能讓你直觀感受到Debezium的能力,所以接下來我將使用嵌入式Debezium引擎來演示一下。流程圖
如上圖所示,當我們變更MySQL數據庫中的某行數據時,通過Debezium實時監聽到binlog日志的變化觸發捕獲變更事件,然后獲取到變更事件模型,并做出響應(消費)。接下來我們來搭建環境。
為了方便這里使用MySQL的Docker容器,對應的腳本為:
上面的腳本運行了一個用戶名為、密碼為并且將數據掛載到本地路徑的MySQL容器,同時開啟了binlog日志,并設置為,這些信息后面配置會用。?
請注意如果不使用用戶的話,需要保證用戶具有, , , , 五種權限。
Spring Boot的應用中加入下列依賴:
?
目前最新的版本號為1.5.2.Final。
然后聲明需要的配置:
配置分為兩部分:一部分是Debezium Engine的配置屬性,參見Debezium Engine配置[1]。一部分是Mysql Connector的配置屬性,參見Mysql Connector配置[2]。
應用程序需要為運行的Mysql Connector啟動一個Debezium引擎,這個引擎會以異步線程的形式運行,它包裝了整個Mysql Connector連接器的生命周期。聲明一個引擎需要以下幾步:聲明收到數據變更捕獲信息的格式,提供了、、、、等格式。加載上面定義的配置。聲明消費數據更改事件的函數方法。
聲明的偽代碼:
方法為:
引擎的啟動和關閉正好契合Spring Bean的生命周期:
啟動該Spring Boot項目,你可以采用各種手段往數據庫增刪改數據,觀察會有類似下面的打印:
說明Debezium監聽到了數據庫的變更。你可以想想這種技術在哪些場景有用武之地。好了今天的分享就到這里,感謝大家的支持,我是:碼農小胖哥。原創不易,請多多關注、點贊、轉發、再看。?
文中的源代碼可通過關注:碼農小胖哥 回復獲取。[1]
Debezium Engine配置: https://debezium.io/documentation/reference/1.5/development/engine.html#engine-properties[2]
Mysql Connector配置: https://debezium.io/documentation/reference/1.5/connectors/mysql.html#mysql-connector-properties
初創公司真的適合用微服務嗎?
2021-06-02
Spring Security 實戰干貨:如何獲取當前用戶信息
2021-05-31