簡體   English   中英

多個Kafka消費者可以從分區讀取相同的消息嗎

[英]Can multiple Kafka consumers read same message from the partition

我們計划編寫一個 Kafka 消費者(java),它讀取 Kafka 隊列以執行消息中的操作。

由於消費者獨立運行,消息是否一次只由一個消費者處理? 否則所有消費者處理相同的消息,因為他們在分區中有自己的偏移量。

請幫我理解。

這取決於組 ID 假設您有一個包含 12 個分區的主題。 如果您有 2 個具有相同 Group Id 的 Kafka 消費者,他們都將讀取 6 個分區,這意味着他們將讀取不同的分區集 = 不同的消息集。 如果您有 4 個具有相同 Group Id 的 Kafka cosnumers,他們每個人都將讀取三個不同的分區等。

但是當您設置不同的 Group Id 時,情況就會改變。 如果您有兩個具有不同 Group Id 的 Kafka 消費者,他們將讀取所有 12 個分區,而彼此之間不會產生任何干擾。 這意味着兩個消費者將獨立讀取完全相同的一組消息。 如果您有四個具有不同組 ID 的 Kafka 消費者,他們都將讀取所有分區等。

我發現這張來自 OReilly 的圖片很有幫助:

卡夫卡

同組內:

  • 同一組(組 1 )中的兩個消費者(消費者 1、2不能消費來自分區(分區 0 )的相同消息。

跨不同組:

  • 兩個消費者在兩個組(從第1組,從第2組消費者1消費者1)可以消耗從分區(分區0)相同的消息。

Kafka 會將訂閱的主題中的每條消息傳遞給每個消費者組中的一個進程。 這是通過平衡消費者組中所有成員之間的分區來實現的,以便將每個分區分配給該組中的一個消費者。 從概念上講,您可以將消費者組視為碰巧由多個進程組成的單個邏輯訂閱者。

簡單來說, Kafka 消息/記錄由每個消費者組只有一個消費者進程處理 因此,如果您希望多個消費者處理消息/記錄,您可以為消費者使用不同的組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM