2016-11-30 34 views
2

如果您的消費者少於分區,那麼這是否意味着您不會消費給定主題上的所有消息?如果你的消費者少於分區,會發生什麼情況?

在雲環境中,您認爲如何跟蹤有多少消費者正在運行以及有多少消費者指向給定主題#分區?

如果您在給定的主題#分區上有多個使用者,該怎麼辦?我想消費者必須以某種方式記錄它已經處理了哪些消息以防重複?

回答

0

1)不,這意味着您將有一位消費者處理多個消費者。 2)Kafka永遠不會將同一個分區分配給多個消費者,因爲這會違反分區內的訂單保證。 3)您可以在您的客戶端代碼中實現ConsumerRebalanceListener,每當從消費者分配或撤銷分區時都會調用該客戶端代碼。

你可能想看看這篇文章,特別是「分配給消費者」部分。在這裏我有一個示例,其中您使用3個分區創建主題,然後使用ConsumerRebalanceListener告訴您哪個消費者正在處理哪個分區。現在你可以通過啓動1個或更多的消費者來看看會發生什麼。示例代碼是在github上

http://www.javaworld.com/article/3066873/big-data/big-data-messaging-with-kafka-part-2.html

5

事實上,每個消費者屬於consumer group。當Kafka集羣將數據發送到使用者組時,分區的所有記錄都將發送給組中的單個使用者。

如果組中的消費者數量多於一個消費者,則某些消費者將消耗來自多個分區的數據。如果一個組中的消費者數量多於分區數量,則某些消費者將無法獲得數據。如果您將新的消費者實例添加到組中,他們將從舊成員中接管一些部分。如果您從組中刪除消費者(或消費者死亡),則其分區將被重新分配給其他成員。

現在讓我們來看看您的問題:

如果你有比消費者少的分區,這是否僅僅意味着你不會消耗所有給定主題的消息?

NO。同一消費羣體中的一些消費者會使用來自多個分區的數據。

在雲環境中,您認爲如何跟蹤有多少消費者正在運行以及有多少消費者指向給定主題#分區?

卡夫卡會照顧它。如果新消費者加入集團,或者老消費者去世,卡夫卡會做出反應。

如果您在給定主題#分區上有多個使用者,該怎麼辦?

您不能讓多個使用者(消費者組)使用單個分區中的數據。但是,如果有多個消費者組,則每個消費者組中的一個(且只有一個)消費者可以使用同一個分區。

相關問題