卡夫卡:如何从消费者那里得到回应?

时间:2020-01-02 17:00:35

标签: apache-kafka

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

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

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

2 个答案:

答案 0 :(得分:2)

使用Kafka的流程如下所示:

Kafka flow

生产者A 知道消费者A 消耗的消息发生了什么的唯一方法是产生另一条消息。将会由任何其他可用的消费者(在这种情况下为消费者B )相应地处理。

您已经提到过,该流程是异步的。当您对查询进行非常繁重的处理(例如生成报告等)时,这很有用,例如第二个生成器将通知用户收件箱。

如果不是这种情况,也许您应该使用HTTP,它是同步的,并且在处理结束时会有响应。

答案 1 :(得分:1)

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

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

您应该考虑使用其他同步通信机制,例如HTTP