|
对于最新稳定版本,请使用Spring for Apache Kafka 4.0.4! |
精确一次语义
您可以提供一个监听器容器并传入一个KafkaAwareTransactionManager实例。
当配置如此时,容器会在调用监听器之前启动一个事务。
监听器执行的任何KafkaTemplate操作都将参与该事务。
如果监听器成功处理记录(或多个记录,当使用BatchMessageListener时),容器将使用producer.sendOffsetsToTransaction()发送偏移量,然后再在事务管理器提交事务之前将偏移量发送给事务。
如果监听器抛出异常,事务将回滚,并且消费者将重新定位,使得回滚的记录(在下一次轮询时)可以再次获取。
请参阅回滚后处理器以获取更多信息和处理反复失败的记录。
使用事务启用精确一次语义(EOS)。
这意味着,对于一个 read → process → write 序列,可以保证该 序列 恰好完成一次。
(读取和处理具有至少一次语义)。
Spring for Apache Kafka version 3.0 及以上版本仅支持 EOSMode.V2:
-
V2- 即 fetch-offset-request 防护(自 2.5 版本起)
| 这需要经纪人版本为2.5或更高。 |
当模式为 V2 时,不需要为每个 group.id/topic/partition 都有一个生产者,因为消费者元数据会随事务的偏移量一起发送,经纪人可以使用该信息来判断生产者是否被围栏(fenced)。
参考 KIP-447 获取更多信息。
V2 之前是 BETA;EOSMode 已更改以与 KIP-732 对齐。