2 回答

TA貢獻1824條經驗 獲得超6個贊
主題的分區如何分配取決于PartitionAssignor
消費者組的組長使用的。加入組的組中的第一個消費者成為領導者。如果新的消費者加入到已經運行的組中,消費者會Leader
根據其PartitionAssignor
將分區分配給組中的特定消費者。
您可以PartitionAssignor
使用partition.assignment.strategy
. 默認值為org.apache.kafka.clients.consumer.RangeAssignor
。如果您想更改小組的分配策略,您可以使用不同的策略或實施自定義策略。
如果你去RangeAssignor
https://kafka.apache.org/10/javadoc/org/apache/kafka/clients/consumer/RangeAssignor.html的javadoc ,你可以找到如下:
范圍分配器在每個主題的基礎上工作。對于每個主題,我們按數字順序排列可用分區,按字典順序排列消費者。然后,我們將分區數除以消費者總數,以確定分配給每個消費者的分區數。如果不均勻劃分,那么前幾個消費者將有一個額外的分區。例如,假設有兩個消費者 C0 和 C1,兩個主題 t0 和 t1,每個主題有 3 個分區,產生分區 t0p0、t0p1、t0p2、t1p0、t1p1 和 t1p2。分配將是: C0: [t0p0, t0p1, t1p0, t1p1] C1: [t0p2, t1p2]
在您的情況下(RangeAssignor
),您不知道新線程是否會空閑。這取決于它獲得的消費者 ID,例如。新實例中的第一個線程可能空閑,但第二個可能開始處理數據。
根據有問題的新信息進行更新

TA貢獻1869條經驗 獲得超4個贊
添加另一個 Kafka 消費者在這里沒有用。第二個消費者中的所有線程都將保持空閑狀態。
一個分區只能分配給一個消費者。雖然,反過來是不正確的。一個消費者可以從 n 個分區中讀取數據。
雖然我不會說添加第二個消費者完全是浪費。您的第二個消費者將充當 HA。如果您的第一個消費者應用程序死了,第二個消費者應用程序將開始從 Kafka 獲取數據。
添加回答
舉報