2016-11-06 231 views
0

我有要求從主題讀取消息,批量並將批量推送到外部系統。如果批處理因任何原因失敗,我需要再次使用同一組消息並重復該過程。因此,對於每個批次,每個分區的起點和終點都存儲在數據庫中。爲了實現這個目標,我們根據存儲的先前偏移量,通過爲讀者分配分區,爲每個分區創建一個卡夫卡消費者,消費者尋找該位置並開始閱讀。我已經關閉了自動提交,並且我沒有提交消費者的偏移量。對於每批次,我爲每個分區創建一個新的消費者,從存儲的最後偏移量讀取消息並將其發佈到外部系統。您是否發現在消費消息時沒有提交消息並跨批次使用同一個消費者組的問題,但是在任何時候,每個分區不會有多個消費者?消費者沒有從卡夫卡消費者提交的消息10消費者

回答

1

您的設計對我來說似乎合理。

向Kafka承諾抵消只是Kafka內部一種方便的內置機制,用於跟蹤抵消。然而,沒有任何要求使用它 - 你也可以使用任何其他機制來跟蹤偏移量(就像在你的情況下使用數據庫一樣)。

此外,如果您手動分配分區,則無論如何都不會有組管理。所以參數group.id不起作用。有關更多詳細信息,請參閱http://docs.confluent.io/current/clients/consumer.html