KAFKA分割槽 生產者 消費者之間的關係

2022-09-07 23:42:31 字數 1040 閱讀 3049

大家都知道,kafka生產者傳送訊息到主題,消費者訂閱主題消費訊息。而主題下邊是分割槽,訊息是儲存在分割槽中,所以事實上是生產者傳送訊息到分割槽,消費者從分割槽讀取訊息。

所以,生產者傳送訊息到哪個分割槽?消費者又從哪個分割槽讀取訊息呢?

kafka主題的分割槽數可以自己設定,如果建立主題的時候沒有指定分割槽數量,就會使用預設的server.properties中的設定。

預設的分割槽策略:

如果傳送訊息的時候指定了分割槽,則訊息傳送到指定分割槽;

如果沒有指定分割槽,但是訊息的key不為空,則基於key的雜湊值來選擇乙個分割槽;

如果既沒有指定分割槽,且訊息的key為空,則用輪詢的方式選擇乙個分割槽。

消費者以組的名義訂閱主題,主題有多個分割槽,消費者組有多個例項,這些例項和分割槽是什麼關係?

同一時刻,一條訊息只能被組中乙個消費者例項消費。

消費者組訂閱這個主題就表示主題中的所有分割槽都會被消費者組中的例項消費到。換句話說,就是主題的每隔分割槽只能被乙個消費者例項消費,不可能出現兩個消費者負責兩個分割槽

所以,如果分割槽數大於或者等於消費者例項數,那麼無非就是乙個消費者負責多個分割槽;

最理想的情況就是分割槽數等於消費者例項數,乙個消費者負責乙個分割槽,

如果消費者例項的數量大於分割槽數,那麼按照預設的策略,有些消費者是多餘的,會一直接收不到訊息而處於空閒狀態。

那麼,會不會存在多個消費者負責同乙個分割槽的資料呢?

kafka在設計的時候就是保證了分割槽下訊息的順序,也就是訊息在分割槽中的順序是怎樣,那麼消費者在消費的時候看的順序就是怎樣。要做到這一點就需要保證訊息是由消費者主動拉取的(pull),還要保證乙個分割槽只能由乙個消費者負責。

假如,乙個分割槽有兩個消費者消費,也就是兩個消費者同時讀取分割槽的資料,由於消費者可以自己控制讀取訊息的offset,就有可能c1讀到1,c2讀到2,c2還沒有處理完,c1已經讀到3了,就會造成很大的浪費,這就相當於多執行緒消費乙個訊息,會造成訊息的重複,且不能保證訊息的順序,就類似於主動推送(push)。

Kafka生產者與消費者分割槽策略

分割槽的目的在於可以提高併發,並在可在集群中擴充套件以適應不同大小的資料 producer傳送的資料會被封裝成producer recorder物件 在生成producer recorder物件時指明partition的情況下,直接進入對應的partition分割槽 沒有指明partition值,但...

Kafka消費者生產者例項

它允許發布和訂閱記錄流,類似於訊息佇列或企業訊息傳遞系統。它可以容錯的方式儲存記錄流。它可以處理記錄發生時的流。由於主要介紹如何使用kafka快速構建生產者消費者例項,所以不會涉及kafka內部的原理。乙個基於kafka的生產者消費者過程通常是這樣的 來自官網 cd kafka 2.11 0.11....

Kafka消費者生產者例項

2017年07月30日18 22 56 rhwayfunn 閱讀數 13818標籤 kafka 更多 個人分類 分布式系統 為了更為直觀展示卡夫卡的訊息生產消費的過程,我會從基於控制台和基於應用兩個方面介紹使用例項.kafka是乙個分布式流處理平台,具體來說有三層含義 它允許發布和訂閱記錄流,類似於...