Spring集成 - Kafka消息驱动通道 - 自动确认

时间:2017-08-06 17:38:41

标签: spring apache-kafka spring-integration

我使用了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消息。

简而言之,如果消费应用程序遇到了一些问题,那么我想回滚事务,以便消息不会被自动确认并一次又一次地重放,除非它被成功处理。

1 个答案:

答案 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提交偏移量。