首页 文章

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

提问于
浏览
0

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

    这不是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提交偏移量 .

相关问题