2017-02-02 33 views
1

我正在使用Kafka 9並與訂閱的行爲混淆。kafka訂閱提交手動補償

  • 爲什麼期望group.id與訂閱。
  • 我們是否需要使用commitSync手動提交偏移量。即使不這樣做,我發現它總是從最新開始。
  • 有沒有辦法從頭開始重放消息。

回答

3

爲什麼期望group.id與訂閱?

卡夫卡使用消費者羣體的概念來實現主題的平行消費 - 每個消費羣體都會發送一次消息,無論實際消費羣體中有多少消費者。這就是爲什麼組參數是強制性的,沒有一個組,Kafka不知道這個消費者應該如何對待可能訂閱同一主題的其他消費者。

每當你啓動一個消費者時,它將加入一個消費者組,根據這個消費者組中有多少其他消費者,它將被分配分區讀取。對於這些分區,它然後檢查列表讀取偏移量是否已知,如果發現其中一個,它將開始從這一點開始讀取消息。 如果未找到偏移量,則參數auto.offset.reset控制是否從分區中的最早或最新消息開始讀取。


我們是否需要提交使用手動commitSync偏移?即使 不這樣做,我看到它始終從最新開始。

無論你是否需要提交的偏移量取決於您選擇的參數enable.auto.commit值。默認情況下,這設置爲true,這意味着消費者會定期自動提交其偏移量(多久會定義爲auto.commit.interval.ms)。如果你設置爲false,那麼你將需要自己提交偏移量。 這種默認行爲可能也是導致您的「問題」的原因,您的消費者總是從最新消息開始。由於偏移量是自動提交的,它將使用該偏移量。


有沒有辦法重播從開始的消息?

如果你想從頭開始,每次閱讀,你可以調用seekToBeginning,如果調用不帶參數,或者只是那些你在通過分區將重置爲所有已訂閱的分區中的第一條消息。

+0

Seektobeginning將與主題分區一起使用,但不能與主題一起使用,以免我們不知道分區。 – Vaishu13

+0

的確,這句話很糟糕,我希望能稍微澄清一下。 –

+0

謝謝。非常有用的信息。 – Vaishu13