2013-07-31 98 views
6

如何在消費或處理完消息後從卡夫卡得到確認。可能聽起來很愚蠢,但是有什麼辦法可以知道已經收到確認的那條消息的開始和結束偏移嗎?如何從卡夫卡獲得鳴謝

回答

1

卡夫卡是不是真的結構要做到這一點。要理解爲什麼,請查看設計文檔here

爲了提供一次性確認,您需要爲您的應用程序創建一些外部跟蹤系統,您可以在其中明確寫入確認並在事務ID上實施鎖定,以確保只能處理一次事務。實施系統的計算成本非常高,這是大型事務處理系統需要比較特殊的硬件並且可以說比可比系統如卡夫卡低的可擴展性的主要原因之一。

如果您不需要強大的持久性語義,您可以使用groups API粗略跟蹤最後一條消息的讀取時間。這確保每條消息至少讀取一次。請注意,由於groups API沒有爲您提供明確跟蹤應用程序自身處理邏輯的能力,因此您的實際處理保證在這種情況下相當弱。依賴冪等處理的方案在這種環境中很常見。

或者,您可以使用名字較差的SimpleConsumer API(使用起來相當複雜),它使您能夠明確地跟蹤應用程序中的時間戳。這是可以通過原生Kafka API實現的最高級別的處理保證,因爲它使您能夠跟蹤應用程序自己處理從隊列中讀取的數據。