对于最新的稳定版本,请使用 Spring for Apache Kafka 3.3.0spring-doc.cadn.net.cn

Exactly Once 语义

您可以为侦听器容器提供KafkaAwareTransactionManager实例。 配置后,容器会在调用侦听器之前启动事务。 任何KafkaTemplate侦听器执行的作参与事务。 如果侦听器成功处理了记录(或多条记录),则在使用BatchMessageListener),容器使用producer.sendOffsetsToTransaction()),在事务管理器提交事务之前。 如果侦听器引发异常,则回滚事务并重新定位使用者,以便可以在下一次轮询时检索回滚的记录。 有关更多信息以及处理反复失败的记录,请参阅 After-rollback Processorspring-doc.cadn.net.cn

使用事务可实现 Exactly Once 语义 (EOS)。spring-doc.cadn.net.cn

这意味着,对于read → process → writesequence 时,可以保证 sequence 只完成一次。 (读取和进程至少具有一次语义)。spring-doc.cadn.net.cn

Spring for Apache Kafka 版本 3.0 及更高版本仅支持EOSMode.V2:spring-doc.cadn.net.cn

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

带模式V2,则无需为每个group.id/topic/partition因为使用者元数据与偏移量一起发送到事务,并且代理可以使用该信息来确定创建者是否被隔离。spring-doc.cadn.net.cn

有关更多信息,请参阅 KIP-447spring-doc.cadn.net.cn

V2之前BETA;这EOSMode已更改以使框架与 KIP-732 保持一致。spring-doc.cadn.net.cn