2014-09-01 80 views
3

enter image description here卡夫卡消費集團分區問題

我讀了卡夫卡wiki,對這張圖片有些問題。

  1. 對於消費者組A,C1,C2只能接收到兩個分區消息,如C1只接收P0,C2只接收P1?

  2. 據我所知,一個消費者組映射一個主題,所以C1,C2必須有相同的主題,所以PO,P1,P2,P3具有相同的主題,是嗎?

  3. 所以有一個矛盾,如果問題2是正確的,那麼消費者組A和消費者組B具有相同的主題,所以它是一個消費者組映射一個主題的矛盾。

  4. C1如何控制P0,P1消息,如果P0,P1具有相同的主題,則表示C1會收到重複消息,如果不是,C1如何控制只有一個偏移量的不同消息?

  5. 關於「所有分區包含相同的主題,至少這是我如何解釋這張照片」的問題。所以我假設,同一個主題名爲「test」,然後一個生產者爲此產生消息「Hello test」話題,這意味着C1,C2,C3,C4都會收到相同的信息? 對於答案,C1仍然會收到兩次「Hello測試」?

  6. CG-A或CG-B可以接收不同的主題信息嗎?

  7. 我沒有看到Consumer Group的優勢,「有時讀卡夫卡消息的邏輯不關心處理消息偏移,它只是想要數據,所以提供高級消費者來抽象大部分消費卡夫卡事件的細節。「來自卡夫卡的維基, 你能否給我一個關於這張照片的消費羣體的例子,就像你種子CG-A正在報告任務和CG-B正在監控?

  8. 是否意味着來自一個名爲「test」的主題的P0,P1,P2,P3會發送不同的消息?但我跟着卡夫卡的wiki,如:

    a。 bin/kafka-server-start.sh config/server.properties

    b。 bin/kafka-topics.sh --create --zookeeper localhost:2181 - 複製因子1 --partitions 3 - 主題測試//分區爲3

    c。 bin/kafka-console-producer.sh - 經紀商名單localhost:9092 - 專題測試

    d。 bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

    然後我在生產者中輸入一些東西,然後消費者會顯示這些消息?

那麼這三個分區怎麼會有不同的信息呢?

  1. 最後,如何使用命令行來模擬此圖片?創建消費組,然後分配一些消費者,然後生成消息,並且我可以監視分區和消費者之間的映射關係,並從其他分區發送消息?

非常感謝

回答

3
  1. 在圖片中,無論是消費者A組和消費者B組讀取所有4個分區。 C1 - > [P0,P3],C2 - > [P1,P2] 讓我們設想一下C1有問題,並且這個消費者終止。然後C2將接管剩餘的兩個分區,映射將變爲C2 - > [P0,P1,P2,P3] 讓我們假設您解決了問題,重新啓動C1並在同一組中添加第三個用戶C3。然後你可以得到一個如C1-> [P0],C2-> [P1,P2],C3-> [P3]的映射。主題的概念與分區有些分離,可以是主題列表由消費者羣體消費,但爲了簡化,圖片可能意味着僅顯示兩個獨立消費者羣體正在消費的一個主題。我們可以想象,CG-A正在對消息做一些簡單的事情,並且可以僅用兩個實例來管理這一點,而CG-B執行更復雜的處理並且需要更多的並行性。它們也可能具有不同的時間限制,以便CG-B可能更多是實時消費者(例如直接監控),而CG-A可能具有較少的實時限制(例如報告服務)。所有分區都包含相同的主題,至少我是這樣解釋這張圖片的。

  2. 沒有矛盾,卡夫卡是一個多用戶消息系統。您可以讓儘可能多的消費者羣體獨立於彼此使用相同的主題。

  3. 一個特定的消息只存在於其中一個分區中,因此不會收到重複的消息。出於冗餘目的,Kafka也具有複製功能,但這是與分區不同的概念。複製未在圖中所示,但是這將意味着你將服務器上有服務器1上類似[P0_leader,P1_follower,P2_follower,P3_leader]和[P0_follower,P1_leader,P2_leader,P3_follower] 2.

+0

謝謝爲你的真棒回答。 我仍然對「所有分區包含相同的主題,至少這是我如何解讀此圖片」有疑問。 所以我假設,同一個主題名爲「測試」,那麼一個生產者產生消息「Hello test」爲這個主題, 這意味着C1,C2,C3,C4都會收到相同的消息嗎? 對於答案,C1仍然會收到兩次「Hello測試」? 是錯的,或者我誤解了一些東西? – regrecall 2014-09-02 01:53:52

+0

再次感謝您的時間,這些問題讓我擔心這麼久,我昨天開始了卡夫卡。 – regrecall 2014-09-02 02:16:59

+0

如果您有一個主題「測試」並生成消息「Hello test」並且不使用任何特定的消息密鑰,那麼此消息將最終位於其中一個分區中(可選地加上該分區的副本)。如果該消息恰好結束於例如P1,那麼它可以被C2和C5消耗。 最後,消費者消費消息的次數實際上取決於該消費者,但對於常見情況,C1只會接收消息一次,然後按指定的時間間隔將最後消費的消息的消息ID作爲一種檢查點提交給Zookeeper 。 – Lundahl 2014-09-25 18:36:08