我使用了spring io docs中列出的示例配置,它运行正常。
<int-kafka:message-driven-channel-adapter
id="kafkaListener"
listener-container="container1"
auto-startup="false"
phase="100"
send-timeout="5000"
channel="nullChannel"
message-converter="messageConverter"
error-channel="errorChannel" />
然而,当我用下游应用程序测试它时,我从kafka消费并将其发布到下游。如果下游已关闭,则消息仍在消耗,并且未被重播。
或者让我们说从kafka主题消费之后,如果我在服务激活器中发现一些异常,我想抛出一些异常,它应该回滚事务以便可以重放kafka消息。
简而言之,如果消费应用程序遇到了一些问题,那么我想回滚事务,以便消息不会被自动确认并一次又一次地重放,除非它被成功处理。
答案 0 :(得分:0)
Apache Kafka的工作原理并非如此。存在类似于JMS的TX语义。 Kafka主题中的偏移量与rallback或redelivery无关。
我建议你从他们的官方资源中学习Apache Kafka。
Spring Kafka没有为常规的Apache Kafka协议带来任何好处,但您可以考虑在Spring Kafka中使用重试功能在本地重新传送相同的记录:http://docs.spring.io/spring-kafka/docs/1.2.2.RELEASE/reference/html/_reference.html#_retrying_deliveries
是的,ack模式必须是MANUAL,消费后不要自动向Kafka提交偏移量。