kafka消費者分割槽分配策略

2021-10-25 09:44:16 字數 1646 閱讀 7989

在這裡對這一塊進行總結,具體看這篇文件

[知乎:kafka消費者組與重平衡](

目前一共三種分割槽分配策略

1.rang

這個策略主要方式是分割槽數除以消費者數來計算的

如果主題的分割槽分割槽不能平均分配給組內每個消費者,那麼對該主題,某些消費者會被分配到額外的分割槽

2.輪詢

這個模式很好理解,但是如果分割槽數大於消費者數量,一些消費者所分配到的分割槽數也會多一點

3. 兩種方式的區別和優缺點

3. sticky分割槽策略

具體的解釋看上面鏈結

4. 觸發分割槽重平衡的時機

應儘量減少分割槽重平衡的時機,因為重平衡過程中,消費者無法從kafka消費訊息,這對kafka的tps影響極大,而如果kafka集內節點較多,比如數百個,那重平衡可能會耗時極多。數分鐘到數小時都有可能,而這段時間kafka基本處於不可用狀態

5.如何減少分割槽重平衡的次數

要說完全避免重平衡,那是不可能滴,因為你無法完全保證消費者不會故障。而消費者故障其實也是最常見的引發重平衡的地方,所以這裡主要介紹如何盡力避免消費者故障。

而其他幾種觸發重平衡的方式,增加分割槽,或是增加訂閱的主題,抑或是增加消費者,更多的是主動控制,這裡也不多討論。

首先要知道,如果消費者真正掛掉了,那我們是沒有什麼辦法的,但實際中,會有一些情況,會讓kafka錯誤地認為乙個正常的消費者已經掛掉了,我們要的就是避免這樣的情況出現。

當然要避免,那首先要知道哪些情況會出現錯誤判斷掛掉的情況。在分布式系統中,通常是通過心跳來維持分布式系統的,kafka也不例外。這裡要說的是,在分布式系統中,由於網路問題你不清楚沒接收到心跳,是因為對方真正掛了還是只是因為負載過重沒來得及發生心跳或是網路堵塞。所以一般會約定乙個時間,超時即判定對方掛了。而在kafka消費者場景中,session.timout.ms引數就是規定這個超時時間是多少。

還有乙個引數,heartbeat.interval.ms,這個引數控制傳送心跳的頻率,頻率越高越不容易被誤判,但也會消耗更多資源。

此外,還有最後乙個引數,max.poll.interval.ms,我們都知道消費者poll資料後,需要一些處理,再進行拉取。如果兩次拉取時間間隔超過這個引數設定的值,那麼消費者就會被踢出消費者組。也就是說,拉取,然後處理,這個處理的時間不能超過max.poll.interval.ms這個引數的值。這個引數的預設值是5分鐘,而如果消費者接收到資料後會執行耗時的操作,則應該將其設定得大一些。

小結一下,其實主要就是三個引數,session.timout.ms控制心跳超時時間,heartbeat.interval.ms控制心跳傳送頻率,以及max.poll.interval.ms控制poll的間隔。這裡給出乙個相對較為合理的配置,如下:

session.timout.ms:設定為6s

heartbeat.interval.ms:設定2s

max.poll.interval.ms:推薦為消費者處理訊息最長耗時再加1分鐘

Kafka消費者的分割槽分配策略

有兩種策略,range和roundrobin。roundrobin策略有兩個前提是 同乙個consumer group裡面的所有消費者的num.streams必須相等 每個消費者訂閱的主題必須相同。range策略是以topic為整體進行分配的,roundrobin是以消費者組為整體進行分配的。假如有...

kafka 消費者分割槽策略

分割槽分配策略 當消費者組中的消費者增多或減少會觸發分割槽分配策略 乙個consumer group中有多個consumer,乙個topic有多個partition,所以必然會涉及到partition 的分配問題,及確定那個partition由哪個consumer來消費。kafka中有兩種分配策略,...

Kafka消費分組和分割槽分配策略

kafka消費分組,訊息消費原理 同乙個消費組裡的消費者不能消費同乙個分割槽,不同消費組的消費組可以消費同乙個分割槽 kafka分割槽分配策略 在 kafka 內部存在兩種預設的分割槽分配策略 range 和 roundrobin。當以下事件發生時,kafka 將會進行一次分割槽分配 將分割槽的所有...