【问题标题】:Is there any solution to notify Kafka message producer to send message again有没有办法通知Kafka消息生产者再次发送消息
【发布时间】:2021-08-18 11:05:15
【问题描述】:

假设 kafka 消息生产者向主题发送事件消息。然后一个消费者处理这个事件消息。但是,这个消费者进程因为业务错误而抛出异常,所以他想让消息生产者知道并重新发送。

有什么解决办法吗?

【问题讨论】:

    标签: apache-kafka spring-kafka


    【解决方案1】:

    一般来说,您不应该在生产者和消费者之间建立这种耦合。

    如果消费者未能读取消息,那么理想情况下它不应该提交该偏移量。如果记录在 Kafka 中没有过期,则生产者无需发送任何内容,因为数据仍在代理中,因此重新启动消费者应用程序将尝试再次读取失败的偏移量。

    【讨论】:

    • 好吧,我的方案是要求制作人再次发送,内容不同(可能需要更正)。但这也很好,我知道吗,对于您的情况,如果我不重新启动并再次使用该消息怎么办?
    • 我不明白这个问题,但从编程上讲,Kafka 没有这样的功能。您需要将您的消费者设置为生产者,将您的生产者设置为消费者,或者使用其他一些 RPC 通道在两者之间进行通信。在大多数情况下,生产者代码是由完全不同的团队编写的,在这种情况下,您实际上需要与其他开发人员沟通
    【解决方案2】:

    如果您希望它永远不会错过任何消息,但可能会重复偶尔出现的消息,您可以使用传递语义“至少一次”。

    【讨论】:

    • 我觉得这里有误会。场景是生产者已经发送成功,消费者处理业务异常,请求生产者重新发送。
    • 生产者不需要再次发送消息,因为kafka更改了偏移量,消息将再次发送给消费者。
    • 如果我正确理解您的问题,您想编辑生成的消息,而在 kafka 中是不可能的,但您可以做的是发送一个密钥,以便消息按顺序发送到同一个分区更正业务发送一条新消息并以正确的方式使用代表您的业务的最后一条消息,在这种情况下您只对最后一条消息感兴趣。
    猜你喜欢
    • 2019-10-03
    • 2018-10-17
    • 1970-01-01
    • 2020-08-31
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    相关资源
    最近更新 更多