我想在单个API调用中发送并从Kafka获取数据(参见下图).
这可能吗?我已经知道如何使数据向一个方向发展(例如,Spark Streaming使用Kafka使用者API读取数据).我也知道如何通过两种单向方法来“伪造它”(例如,网络应用程序既是生产者又是消费者).但是,当Web应用程序进行API调用时,我只希望它必须处理自己的记录,而不是主题中的所有记录,所以这似乎是错误的方法.
我想到的其他次优方法:
>将Spark Streaming结果保存在数据库中,以便Web应用程序可以不断轮询数据库,直到结果显示出来.我担心这会耗费大量资源并延迟响应时间.
>每次打电话给Kafka制作人时,都要创建短期/临时消费者.临时消费者将过滤掉所有记录,除了它正在寻找的记录.当它找到它正在寻找的记录时,临时消费者就会关闭.我认为这不会起作用,因为API调用者关心的记录可能会转到另一个分区,因此永远不会找到它.
>为每个Web应用程序的消费者API调用创建一个临时主题.我不确定卡夫卡是否会抱怨太多话题.
有什么建议?
最佳答案 我做的是……
>创建一个使用密钥发送数据的synProducer,并为名称为已发送消息的密钥的主题创建使用者.
>然后,synConsumer处理该消息并回复主题,其中步骤1的消费者正在等待.
>删除临时主题
这种方法的缺点是不会立即删除问题.