精確一次語意
您可以為監聽器容器提供 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
之前為 BETA
;EOSMode
已變更以使框架與 KIP-732 對齊。