【问题标题】:Kafka: How to retrieve a response from consumer?Kafka:如何从消费者那里检索响应?
【发布时间】:2020-01-02 17:00:35
【问题描述】:

我想描述以下场景: 我有一个 node.js 后端应用程序(它使用单线程事件循环)。 这是系统的一般架构: 生产者 -> Kafka -> 消费者 -> 数据库

假设生产者向Kafka发送了一条消息,这条消息的目的是在数据库中进行某个查询并检索查询结果。 但是,众所周知,Kafka 是一个异步系统。如果生产者向 Kafka 发送消息,它会收到消息已被 Kafka 代理接受的响应。 Kafka 代理不会等到消费者轮询消息并对其进行处理。

在这种情况下,生产者如何获取对数据库操作的查询结果?

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    使用 Kafka 的流程如下所示:

    生产者 A 了解 消费者 A 所消费的消息发生了什么的唯一方法是产生另一条消息。这将由任何其他可用的消费者(在本例中为消费者 B)相应地处理。

    正如您已经提到的,此流程是异步的。当您对查询进行非常繁重的处理时,这可能很有用,例如生成报告或类似的东西,并且第二个生产者将通知用户收件箱。

    如果不是这样,也许您应该使用 HTTP,它是同步的,并且您将在处理结束时获得响应。

    【讨论】:

      【解决方案2】:

      您必须生成新流程来传达查询结果:

      Consumer (now its a producer) -> Kafka topic -> Producer (now its a consumer)
      

      您应该考虑使用另一种同步通信机制,例如 HTTP

      【讨论】:

        猜你喜欢
        • 2020-09-05
        • 2022-09-25
        • 1970-01-01
        • 2023-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多