我们正在使用Spring Cloud Stream for Kafka,并且正在寻找具有消费者API的“精确语义”

时间:2019-03-27 15:33:14

标签: kafka-consumer-api kafka-producer-api spring-cloud-stream

我们正在为Kafka使用Spring Cloud Stream,并正在寻找“精确语义”。 我们有一个解决方案可以按预期工作 1)启用生产者的幂等和交易 2)使用MetaDataStore使用键(offsetId + partitionId + topicName)从使用者方检查重复消息 通过上述解决方案,我们不会丢失任何消息,也不会重复处理

但是现在我们发现有一个属性(producer.sendOffsetsToTransaction)Kafka API,它可以帮助我们从使用者端修复重复处理,而无需任何元数据存储逻辑。现在不确定如何使用具有此属性.sendOffsetsToTransaction

的Spring cloud stream来做到这一点

1 个答案:

答案 0 :(得分:0)

如果您将KafkaTransactionManager添加到应用程序上下文中,它将由框架自动处理。

您必须在配置中添加交易ID前缀。

spring.kafka.producer.transaction-id-prefix

Boot将自动添加事务管理器。

请参见producer properties

  

spring.cloud.stream.kafka.binder.transaction.transactionIdPrefix

     

在活页夹中启用事务。请参阅Kafka文档中的transaction.id和spring-kafka文档中的Transactions。启用事务后,单个生产者属性将被忽略,所有生产者都将使用spring.cloud.stream.kafka.binder.transaction.producer。*属性。

当侦听器正常退出时,侦听器容器将偏移量发送到事务,然后再提交事务。