Apache Kafka資料模型概念簡介 - Baeldung

banq發表於2021-01-05

在本教程中,我們將探索使用Apache Kafka進行事件驅動的體系結構的資料建模領域。
在事件驅動系統的資料建模任務之前,我們需要了解一些概念,例如事件,事件流,生產者-消費者和主題。
  • 事件

卡夫卡世界中的事件是業務領域世界中發生的事情的資訊日誌。它透過將資訊記錄為鍵值對訊息以及其他一些屬性(例如時間戳,元資訊和標頭)來完成此操作。
  • 訊息流/訊息流

Apache Kafka是一種流處理系統,可將事件捕獲為訊息流。通常,使用傳統的表模式儲存物件的最新靜態狀態。
另一方面,事件流可以幫助我們以事件的形式捕獲兩個連續狀態之間的動態變化。如果我們播放一系列這些不可變的事件,我們可以從一個狀態過渡到另一個狀態。這就是事件流和傳統表之間的關係,通常稱為流表對偶stream table duality。
  • 主題topic

下面看看如何透過Apache Kafka路由對訊息進行分類。
在諸如Apache Kafka之類的訊息傳遞系統中,任何產生事件的事件通常稱為生產者。那些閱讀和消費這些訊息的人稱為消費者。
在現實世界中,每個生產者可以生成不同型別的事件,因此,如果我們希望他們過濾與他們相關的訊息並忽略其餘訊息,那麼這將浪費大量的精力。
為了解決這個基本問題,Apache Kafka使用的主題本質上是屬於在一起的訊息組。結果,消費者可以在消費事件訊息的同時提高生產力。
讓我們看看如何使用分割槽建立訊息的進一步分類並提高整個系統的效能。
我們可以將一個主題劃分為多個分割槽,並呼叫多個使用者以使用來自不同分割槽的訊息。透過啟用這種併發行為,可以提高系統的整體效能。預設情況下,除非在建立主題時明確指定,Kafka會建立主題的單個分割槽。但是,對於先前存在的主題,我們可以增加分割槽的數量。
在一個主題內,Kafka使用分割槽鍵跨多個分割槽處理訊息。一方面,生產者隱式使用它來將訊息路由到分割槽之一。另一方面,每個使用者都可以從特定分割槽讀取訊息。
分割槽鍵:預設情況下,生產者將生成鍵的雜湊值,後跟具有分割槽數的模數。然後,它將訊息傳送到由計算出的識別符號標識的分割槽。
  • 縮放

我們如何概念化主題和分割槽對於水平擴充套件至關重要。一方面,主題更多是資料的預定義分類。另一方面,分割槽是動態發生的資料動態分類。
此外,在一個主題中我們可以配置多少個分割槽存在實際限制。這是因為每個分割槽都對映到代理節點檔案系統中的目錄。當我們增加分割槽數量時,我們也增加了作業系統上開啟檔案控制程式碼的數量。
根據經驗,Confluent的專家建議將每個代理的分割槽數限制為100 x b x r,其中b是Kafka群集中的代理數,r是複製因子。
 

啟動Kafka
一個Kafka叢集由在Zookeeper叢集中註冊的多個Kafka代理組成。為了簡單起見,我們將使用Confluent釋出的現成的Docker映像和docker-compose配置。
首先,讓我們下載3節點Kafka叢集的docker-compose.yml :

$ BASE_URL="https://raw.githubusercontent.com/confluentinc/cp-docker-images/5.3.3-post/examples/kafka-cluster"
$ curl -Os "$BASE_URL"/docker-compose.yml

接下來,讓我們啟動Zookeeper和Kafka代理節點:

$ docker-compose up -d

最後,我們可以驗證所有Kafka經紀人都在工作:

$ docker-compose logs kafka-1 kafka-2 kafka-3 | grep started
kafka-1_1      | [2020-12-27 10:15:03,783] INFO [KafkaServer id=1] started (kafka.server.KafkaServer)
kafka-2_1      | [2020-12-27 10:15:04,134] INFO [KafkaServer id=2] started (kafka.server.KafkaServer)
kafka-3_1      | [2020-12-27 10:15:03,853] INFO [KafkaServer id=3] started (kafka.server.KafkaServer)

 

相關文章