使用 Postgres、Debezium 和 Kafka 流式傳輸資料
透過流處理,我們可以在資料可用時持續處理資料
我們以事件流的形式從事件源(例如資料庫)實時捕獲資料,並將資料移動到目標系統(例如資料倉儲和資料庫)。
什麼是事件?
事件就是你將資料概念化的時候。
我這麼說是什麼意思?考慮一下下面的語句
"我買了咖啡"
"我在週一下午2點從Starbites買了咖啡"
第一個語句只是資料,但第二個語句是一個事件。
變更資料採集(CDC)和Debezium
這個想法很簡單。它是關於從資料庫中獲取變化。CDC將使我們能夠捕獲已經在資料庫中的一切,以及第一次捕獲後的任何變化。
比方說,你有一個Postgres資料庫。現在,當我們在資料庫中插入任何新的記錄,更新資料庫中現有的記錄或從資料庫中刪除記錄時,Debezium透過挖掘資料庫的交易日誌來獲得有關變化的通知。Debezium捕捉到這些變化,並將它們流向Kafka主題。Kafka Connect是Apache Kafka框架的一部分,負責將這些變化傳送到Kafka。它充當了流式資料進出Kafka的橋樑。你可以用它來連線你的Kafka資料庫和資料來源。
現在,當資料在Kafka中時,我們的目標系統可以訂閱Kafka主題,這樣就可以把變化流傳給他們。
有人會問,"為什麼你要做這個基於日誌的CDC?為什麼不是基於查詢的CDC?
有2種型別的CDC:基於查詢的CDC和基於日誌的CDC
使用基於查詢的CDC:
你只是寫一個SQL來獲得你需要的資料。該查詢將包括一個謂詞,以確定什麼已經改變。這可能是基於一個時間戳欄位。
讓我們假設我們在資料庫中有4條記錄。當我們執行查詢時,我們得到了所有的記錄(因為之前的時間戳是從0開始的,所有的ts_cols都大於0)。現在,如果一條新的記錄被插入資料庫,當我們再次執行我們的查詢時會發生什麼。現在時間戳被設定為我們最後一次執行查詢的時間,我們可以提取被插入的新記錄。
這就是基於查詢的CDC的工作方式。
請注意這個方法,因為我們必須儘可能頻繁地執行查詢以獲得新的記錄。
JDBC聯結器是一個例子,你將會使用它來進行基於查詢的CDC
基於日誌的CDC
然而,對於基於日誌的CDC來說,情況就不一樣了。對於基於日誌的 CDC,我們不是在寫任何時間戳大於的查詢來提取新記錄。相反,我們要看的是資料庫的交易日誌,而聯結器必須以某種方式獲得對這些資料的訪問。任何時候,只要有插入,它就會被寫入事務長,由於我們也在事務日誌上保持一個標籤,我們可以看到它們,然後從它們的內部格式中解碼,並將它們寫成Avro/JSON的格式化資訊。
有了基於日誌的CDC,我們不僅可以看到新的記錄,我們還可以看到它是如何到達那裡的,所以有某種歷史。另外,當我們進行刪除時,它會被追加到日誌中,所以我們可以看到它們。這些是你在使用基於查詢的CDC時不會看到的一些東西。你只看到更新
Debezium專案的所有聯結器都是基於日誌的CDC聯結器的例子。
使用Debezium從Postgres中串流資料,開啟了我們可以利用的一系列可能性。
我希望這篇文章能達到它的目的,作為對用Debezium和Kafka建立一個事件驅動系統的一個可理解的介紹。
相關文章
- 使用Pandas IO工具流式傳輸源資料
- 【流式傳輸】使用Spring Boot實現ChatGpt流式傳輸Spring BootChatGPT
- Debezium zookeeper kafka mysql資料處理KafkaMySql
- 比較Apache Pulsar 和Apache Kafka:統一排隊和流式傳輸 - splunkApacheKafka
- 【分段傳輸】c#使用IAsyncEnumerable實現流式分段傳輸C#
- 使用 Kafka 和 Debezium 排程數百萬條訊息 - YotpoKafka
- Debezium kafka elasticsearch 配置KafkaElasticsearch
- 資料線線損和長度對資料傳輸和網路傳輸的影響
- 大資料技術 - Debezium大資料
- Hadoop資料傳輸:如何將資料移入和移出Hadoop?Hadoop
- 使用POST方法傳輸二進位制資料
- Jmeter使用beanshell對資料進行加密傳輸JMeterBean加密
- 使用Spring Boot RESTful Web流式資料 | TechshardSpring BootRESTWeb
- nodejs 介面傳輸資料NodeJS
- iOS資料傳輸工具iOS
- 關於印度跨境資料傳輸,印度放寬了跨境資料傳輸
- Consul流式傳輸引發Roblox停機事後分析
- Netty整合SpringBoot並使用Protobuf進行資料傳輸NettySpring Boot
- Jmeter中使用前置處理器加密傳輸資料JMeter加密
- 鐳速傳輸:保護企業資料傳輸和檔案傳輸的最佳解決方案是什麼?
- openGauss OCK加速資料傳輸
- iPaas資料傳輸的方式
- HDFSDATANODE資料傳輸詳解
- TCP傳輸資料長度TCP
- 特殊條件資料傳輸
- 讓資料傳輸更安全
- 使用Storm、Kafka和ElasticSearch處理實時資料 -javacodegeeksORMKafkaElasticsearchJava
- 企業大資料傳輸方式,鐳速提供大資料傳輸解決方案大資料
- 資料傳輸 | 如何配合 pt-osc 使用 DTLE 同步 DDL
- MySQL資料庫遷移到PostgresMySql資料庫
- 將CSV的資料傳送到kafka(java版)KafkaJava
- Xamarin Essentials教程資料處理傳輸資料
- 使用 Flink Hudi 構建流式資料湖平臺
- oracle net manager 資料傳輸安全Oracle
- 資料傳輸控制方式(i/o)
- MongoDB和資料流:使用MongoDB作為Kafka消費者MongoDBKafka
- 使用嵌入式Debezium和SpringBoot捕獲更改資料事件(CDC) - Sohan GanapathySpring Boot事件
- Debezium vs OGG vs Tapdata:如何實時同步 Oracle 資料到 Kafka 訊息佇列?OracleKafka佇列