Exactly Once Semantics

您可以为侦听器容器提供“KafkaAwareTransactionManager”实例。在如此配置后,容器会在调用侦听器前启动事务。侦听器执行的任何“KafkaTemplate”操作都会参与事务。如果侦听器成功处理记录(或多个记录,当使用“BatchMessageListener”时),则容器将在事务管理器提交事务之前使用“producer.sendOffsetsToTransaction())”将偏移量发送给事务。如果侦听器抛出异常,则该事务回滚,使用者重新定位,以便在下一次轮询时检索回滚的记录。有关详情以及如何处理反复失败的记录,请参阅“After-rollback Processor”。

使用事务可启用 Exactly Once Semantics (EOS)。

这意味着,对于 read → process → write 序列,可以保证 序列 精确完成一次。(读取和处理至少有一次语义)。

适用于 Apache Kafka 3.0 及更高版本的 Spring 仅支持 EOSMode.V2

  • V2——又称提取偏移量请求隔离(从版本 2.5 起)

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

在模式 V2 中,不需要每个 group.id/topic/partition 都拥有一个生产者,因为消费者元数据会连同偏移量一起发送到事务,而代理可以根据该信息确定生产者是否被隔离。

有关详情,请参阅“ KIP-447”。

V2”以前是“BETA”;“EOSMode”已更改为将该框架与“ KIP-732”对齐。