精確一次語義

您可以為監聽器容器提供一個 `KafkaAwareTransactionManager` 例項。配置後,容器會在呼叫監聽器之前啟動一個事務。監聽器執行的任何 `KafkaTemplate` 操作都會參與到該事務中。如果監聽器成功處理了記錄(或使用 `BatchMessageListener` 時處理了多條記錄),容器會在事務管理器提交事務之前,使用 `producer.sendOffsetsToTransaction()` 將偏移量傳送到事務。如果監聽器丟擲異常,事務將被回滾,並且消費者將被重新定位,以便在下次拉取時可以檢索到回滾的記錄。有關詳細資訊以及如何處理反覆失敗的記錄,請參閱回滾後處理器

使用事務可以實現精確一次語義 (EOS)。

這意味著,對於一個 `讀取 → 處理 → 寫入` 序列,可以保證該**序列**精確地完成一次。(讀取和處理具有至少一次語義)。

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

  • `V2` - 也稱為 fetch-offset-request 隔離(自 2.5 版本起)

這要求 broker 的版本為 2.5 或更高。

在 `V2` 模式下,無需為每個 `group.id/topic/partition` 配置生產者,因為消費者元資料會隨偏移量一起傳送到事務中,broker 可以利用這些資訊來確定生產者是否被隔離。

有關更多資訊,請參閱KIP-447

`V2` 此前是 `BETA`;`EOSMode` 已更改,以使框架與KIP-732 對齊。