对于最新的稳定版本,请使用 Spring for Apache Kafka 3.3.9! |
恰好一次语义
您可以为侦听器容器提供KafkaAwareTransactionManager
实例。
如此配置后,容器会在调用侦听器之前启动事务。
任何KafkaTemplate
侦听器执行的作参与事务。
如果侦听器成功处理了记录(或多条记录,当使用BatchMessageListener
),容器使用producer.sendOffsetsToTransaction()
),然后再提交事务。
如果侦听器抛出异常,则事务将回滚,使用者将重新定位,以便在下一次轮询时可以检索回滚的记录。
请参阅回滚后处理器,了解更多信息以及处理反复失败的记录。
使用事务可以启用 Exactly Once 语义 (EOS)。
这意味着,对于read → process → write
sequence,则保证序列恰好完成一次。
(读取和进程至少具有一次语义)。
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
以前是BETA
;这EOSMode
已更改以使框架与 KIP-732 保持一致。