2 回答

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

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個贊
添加另一個 Kafka 消費(fèi)者在這里沒有用。第二個消費(fèi)者中的所有線程都將保持空閑狀態(tài)。
一個分區(qū)只能分配給一個消費(fèi)者。雖然,反過來是不正確的。一個消費(fèi)者可以從 n 個分區(qū)中讀取數(shù)據(jù)。
雖然我不會說添加第二個消費(fèi)者完全是浪費(fèi)。您的第二個消費(fèi)者將充當(dāng) HA。如果您的第一個消費(fèi)者應(yīng)用程序死了,第二個消費(fèi)者應(yīng)用程序?qū)㈤_始從 Kafka 獲取數(shù)據(jù)。
添加回答
舉報(bào)