跳到主要内容
版本:4.1.1

恰好一次语义

Doubao 中英对照 Exactly Once Semantics

你可以为监听容器提供一个 KafkaAwareTransactionManager 实例。如此配置后,容器在调用监听器之前开启一个事务。监听器执行的任何 KafkaTemplate 操作都参与该事务。如果监听器成功处理了记录(在使用 BatchMessageListener 时为多条记录),容器会在事务管理器提交事务之前,通过 producer.sendOffsetsToTransaction()) 将偏移量发送到事务中。如果监听器抛出异常,事务将回滚,消费者被重新定位,以便在下一次轮询时取回被回滚的记录。更多信息以及对反复失败记录的处理,请参见 回滚后处理器。

使用事务可启用恰好一次语义(EOS)。

这意味着,对于 读取 → 处理 → 写入 序列,可以保证该 序列 恰好完成一次。(读取和处理至少具有一次语义)。

Spring for Apache Kafka 3.0 及更高版本仅支持 EOSMode.V2:

  • V2 —— 又称 fetch-offset-request 围栏(自 2.5 版本起)
important

这要求代理版本为 2.5 或更高。

使用 V2 模式时,无需为每个 group.id/topic/partition 配备一个生产者,因为消费者元数据会连同偏移量一起发送到事务中,代理可以利用该信息判断生产者是否被围栏隔离。

更多信息请参阅 KIP-447。

V2 以前称为 BETA;EOSMode 已被更改,以使该框架与 KIP-732 保持一致。