精确一次语义

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

使用事务可以实现精确一次语义(EOS)。

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

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

  • V2 - 又称 fetch-offset-request fencing (自版本 2.5 起)

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

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

请参阅 KIP-447 了解更多信息。

V2 之前是 BETAEOSMode 已更改以使框架与 KIP-732 保持一致。

© . This site is unofficial and not affiliated with VMware.