恰好一次语义
您可以为监听器容器提供一个 KafkaAwareTransactionManager
实例。当这样配置时,容器会在调用监听器之前启动一个事务。监听器执行的任何 KafkaTemplate
操作都参与事务。如果监听器成功处理记录(或使用 BatchMessageListener
时处理多个记录),则容器会使用 producer.sendOffsetsToTransaction()
将偏移量发送到事务,然后事务管理器提交事务。如果监听器抛出异常,则事务将回滚,并且消费者将重新定位,以便可以在下次轮询时检索回滚的记录。有关更多信息以及如何处理重复失败的记录,请参阅 回滚后处理器。
使用事务可以实现恰好一次语义 (EOS)。
这意味着对于 读取 → 处理 → 写入
序列,保证该序列恰好完成一次。(读取和处理至少具有单次语义)。
Spring for Apache Kafka 3.0 及更高版本仅支持 EOSMode.V2
-
V2
- 也称为获取偏移量请求围栏 (自 2.5 版本起)
这要求代理版本为 2.5 或更高版本。 |
使用模式 V2
,无需为每个 group.id/topic/partition
都使用生产者,因为消费者元数据会与偏移量一起发送到事务中,并且代理可以使用该信息来确定生产者是否已通过围栏。
有关更多信息,请参阅 KIP-447。
V2
以前是 BETA
;已更改 EOSMode
以使框架与 KIP-732 保持一致。