精確一次語意

您可以為監聽器容器提供 KafkaAwareTransactionManager 實例。如此設定後,容器會在調用監聽器之前啟動交易。監聽器執行的任何 KafkaTemplate 操作都會參與交易。如果監聽器成功處理記錄(或多個記錄,當使用 BatchMessageListener 時),容器會使用 producer.sendOffsetsToTransaction() 將偏移量傳送至交易,然後交易管理器再提交交易。如果監聽器拋出例外,則交易會回滾,並且消費者會重新定位,以便在下次輪詢時可以檢索回滾的記錄。請參閱 回滾後處理器 以取得更多資訊,以及處理重複失敗的記錄。

使用交易啟用精確一次語意 (EOS)。

這表示,對於 讀取 → 處理 → 寫入 序列,保證序列恰好完成一次。(讀取和處理具有至少一次語意)。

Spring for Apache Kafka 3.0 版及更高版本僅支援 EOSMode.V2

  • V2 - 又稱 fetch-offset-request fencing(自 2.5 版起)

這需要 Broker 版本為 2.5 或更高版本。

使用 V2 模式,不需要為每個 group.id/topic/partition 都有一個生產者,因為消費者元數據會與偏移量一起傳送至交易,並且 Broker 可以使用該資訊來判斷生產者是否被隔離。

請參閱 KIP-447 以取得更多資訊。

V2 之前為 BETAEOSMode 已變更以使框架與 KIP-732 對齊。