2017-01-06 53 views
1

我目前正在探索卡夫卡作爲一個簡單問題的初學者。卡夫卡消費者同步行爲

將有一個生產者推消息給一個主題但會有 是Ñ數火花應用的消費的從 卡夫卡按摩數據和插入到數據庫(每個消費者插入到不同的 表)。

是否有消費者可能會不同步(如消費者的某些部分相當一段時間下降),然後 一個或多個消費者不會處理該消息並插入到表 ?

假設代碼總是正確的,當按摩數據時不會出現異常。重要的是每個郵件只能處理 一次。

我的問題是,做卡夫卡處理這部分我們還是必須寫一些其他的代碼,以確保不會發生這種情況。

回答

0

您可以將消費者分組(請參閱group.id配置)以及該分組的消費者將主題的分區分隔開。一旦消費者下降,該組中的另一位消費者將接管通過丟棄讀取的分區。

但是,可能存在一些問題:當消費者讀取分區時,它將偏移量提交回Kafka,並且如果消費者在處理接收到的數據之後但在提交偏移量之前丟棄,則其他消費者將從最新的可用偏移量開始讀取。幸運的是,你可以管理的是如何彌補致力於戰略(見消費者設置enable.auto.commitauto.offset.reset等)

Kafka and Spark Streaming guide提供了一些解釋和如何管理偏移的可能策略。

+0

看起來像卡夫卡不能保證消息只有一次,但至少一次交付。 –

+0

是的。這是分銷成本和高性能。如果你需要,你必須自己做。 –