2017-05-17 35 views
0

我正在嘗試使用卡夫卡設計一些處理代理來並行處理來自卡夫卡主題的消息。卡夫卡分區和消費者羣至少一次消息傳遞

我希望確保在整個消費羣體的每個消息處理過程中接近完全一次,儘管至少可以容忍一次。

我找到的文檔在許多方面還不清楚,並且有我必須知道這是否是一個可行的辦法了幾個具體的問題:

  • 如果消息被髮布到一個話題,它出現一次只能在主題中的所有分區上進行復制,或者複製到可能多於一個分區上?我已閱讀可能支持兩種可能性的陳述。
  • 是每個分區或每個消費者/消費者組/分區的「偏移」嗎?
  • 當我開始一個新的消費者時,它是否會查看整個消費羣組的偏移量或它爲其分配的分區?
  • 如果我想擴大新的消費者並且沒有空閒分區(我認爲每個分區不能有多個消費者),kafka是否會重新平衡現有分區中的現有消息,以及這會如何影響補償和現有分區的消費者?

或者有沒有其他意見可以幫助我理解這一點?

回答

2

如果消息發佈到某個主題,它是否僅在該主題的所有分區中存在一次,還是在可能多個分區上覆制?我已閱讀可能支持兩種可能性的陳述。

[A]:分區根據複製因素跨節點複製。如果在具有2個節點且複製因子爲2的代理中分區P1,則node1將成爲P1的主要領導者,並且node2也將具有P1內容/ messaged,但它將成爲副本(並且複製以異步方式發生)

是每個分區或每個消費者/消費者組/分區的「偏移」嗎?

[A]:從代理的角度來看每個分區。它也是每個消費者,因爲'消費'在消費者端被明確地跟蹤/管理。消費者代碼可以將此工作委派給Kafka或手動管理偏移

當我啓動新的使用者時,它會查看整個使用者組的偏移量還是分配給它的分區的偏移量?

[A]:當新消費者進入組併爲其分配特定分區時,kafka將觸發重新平衡。從那裏開始,消費者只關心它所負責的分區的偏移量

如果我想擴大新的消費者並且沒有空閒的分區(我相信每個消費者不能超過一個分區),kafka會重新平衡來自現有分區的現有消息,以及這會如何影響現有分區的偏移量和消費者?對於並行性來說,理想的情況是對消費者和分區進行1-1映射,例如,如果您有10個分區,則最多可以有10個消費者。如果您攜帶第11件,卡夫卡不會爲其分配分區,除非現有的消費者離開組羣