簡體   English   中英

了解同一消費者組內但訂閱不同的 Kafka 消費者重新平衡的性質

[英]Understanding the nature of Kafka Consumer Rebalance within same consumer-group but with different subscriptions

我需要就重新平衡如何影響同一組中的消費者但訂閱 Kafka 中不同主題正則表達式的消費者進行一些說明 [0.10.1]

假設我們有三個 kafka 消費者c1c2c3 他們分別訂閱主題*_t1*_t2*_t3 現在,讓我們將所有這些消費者放在同一個消費者組中,比如my-consumer 在這種情況下,如果在*_t1中添加新主題, c2c3是否會參與重新平衡?

我在這里瀏覽了 kafka 文檔並找到了一些相關信息。 第 2 點明確表示消費者:

Register a watch on changes (new consumers joining or any existing consumers leaving) under the consumer id registry. (Each change triggers rebalancing among all consumers within the group to which the changed consumer belongs.)

因此,即使新消費者加入訂閱*_t1 ,也會對c2c3進行重新平衡。 但我對第 4 點如何影響重新平衡並不了解。 我認為,對於*_t1發生的主題創建/刪除/更改, c2c3不會受到影響? 不是這樣嗎?

我知道我們可以在消費者中擁有三個不同的消費者群體,但我試圖了解這是否必要和/或良好做法。

因此,即使訂閱 *_t1 的新消費者加入,c2 和 c3 也會發生重新平衡。

沒錯。

但我對第 4 點如何影響重新平衡並不了解。 我認為,對於 *_t1、c2 和 c3 中發生的主題創建/刪除/更改不會受到影響? 不是這樣嗎?

只要消費者同一個消費者組中,任何變化(例如消費者數量的變化,例如消費者 c1 訂閱 *_t1 主題被停止)都會發生重新平衡,即使 c2 和 c3 與 *_t1 無關。 這對於主題/分區數量的任何變化都是類似的。 這是因為對於同一個消費者組中的所有消費者,Kafka 希望確保所有分區(對於所有訂閱的主題)都得到照顧,即 1 分區 1 消費者。 請注意,1 個消費者可以消耗 1 個以上的分區,但反之則不然。

我知道我們可以在消費者中擁有三個不同的消費者群體,但我試圖了解這是否必要和/或良好做法。

推薦的做法(是的,你是對的)是將消費者放在他們訂閱相同主題的同一個消費者組 IFF 中。 在上面的例子中,將有 3 個消費者組,每個組都從各自的主題中消費。

消費者組 my-consumer-1,c1 消費 *_t1
消費者組 my-consumer-2,c2 消費 *_t2
消費者組 my-consumer-3,c3 消費 *_t3

因此,my-consumer-1 中發生的任何更改都不會對組 my-consumer-2 和 my-consumer-3 的性能產生影響。

對於后代, 這里采用的再平衡定義:

重新平衡是一組消費者實例(屬於同一組)協調以擁有該組訂閱的一組互斥主題分區的過程。 在消費者組的成功重新平衡操作結束時,所有訂閱主題的每個分區都將由組內的單個消費者實例擁有。 重新平衡的工作方式如下。 每個經紀人都被選為消費者組子集的協調員。 組的協調器代理負責為訂閱主題的消費者組成員資格更改或分區更改編排重新平衡操作。 它還負責將生成的分區所有權配置傳達給正在進行重新平衡操作的組的所有使用者。

還有一些好消息,在 Kafka 2.5 中,重新平衡的“效果”可能會有一些“性能”改進

當使用 RebalanceProtocol#COOPERATIVE 時,Consumer#poll 仍然可以返回數據,而它仍然處於消費者擁有的那些分區的重新平衡過程中; 此外,Consumer#commitSync 現在可能會拋出一個非致命的 RebalanceInProgressException 來通知用戶此類事件,以區別於致命的 CommitFailedException 並允許用戶完成正在進行的重新平衡,然后重新嘗試為那些仍然擁有的分區提交偏移量。

暫無
暫無

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

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