我们正在为Kafka使用Spring Cloud Stream,并正在寻找“精确语义”。 我们有一个解决方案可以按预期工作 1)启用生产者的幂等和交易 2)使用MetaDataStore使用键(offsetId + partitionId + topicName)从使用者方检查重复消息 通过上述解决方案,我们不会丢失任何消息,也不会重复处理
但是现在我们发现有一个属性(producer.sendOffsetsToTransaction
)Kafka API,它可以帮助我们从使用者端修复重复处理,而无需任何元数据存储逻辑。现在不确定如何使用具有此属性.sendOffsetsToTransaction
答案 0 :(得分:0)
如果您将KafkaTransactionManager
添加到应用程序上下文中,它将由框架自动处理。
您必须在配置中添加交易ID前缀。
spring.kafka.producer.transaction-id-prefix
Boot将自动添加事务管理器。
spring.cloud.stream.kafka.binder.transaction.transactionIdPrefix
在活页夹中启用事务。请参阅Kafka文档中的transaction.id和spring-kafka文档中的Transactions。启用事务后,单个生产者属性将被忽略,所有生产者都将使用spring.cloud.stream.kafka.binder.transaction.producer。*属性。
当侦听器正常退出时,侦听器容器将偏移量发送到事务,然后再提交事务。