apache-kafka 使用Kafka流发送Http请求

pcww981p  于 2022-11-01  发布在  Apache
关注(0)|答案(1)|浏览(463)

我知道不建议使用kafka流发送http请求,因为外部RPC调用的阻塞特性可能会影响性能。
但是,如果用例不允许我避免发送http请求,该怎么办?

我正在构建一个应用程序,它从一个输入主题开始消费,然后对每个消息都要进行过滤、Map和与kTable连接的各种迭代。在这些迭代结束时,结果就可以“交付”了。
显然,“delivery”方法是通过http请求。我必须调用外部rest API将这些结果发送给各个供应商。我还需要等待响应返回,并根据结果将交付标记为成功或失败,并将结果生成到输出主题,其他服务将使用这些结果进行存档。
我知道http调用会阻塞当前调用的流线程,所以我配置了一个超时,它严格地大大小于消费者的 * max.poll.interval.ms *,以避免在外部API服务关闭的情况下重新平衡。同时,超时的请求将被发送到一个低优先级队列,以备稍后重新尝试交付。
正如您所看到的,我无法真正避免在Kafka流中进行外部RPC调用。我只是好奇,是否有更好的体系结构是为了这样的用例?

eqqqjvef

eqqqjvef1#

如果无法避免,则另一个选择是将数据发送到某个出站“请求”主题,并编写一个使用者来执行请求,然后使用HTTP状态代码或成功/失败指示符将结果返回到“响应”主题。
然后,让流也使用此响应主题进行加入。
在流中不阻塞RPC的主要原因是它对时间非常敏感,通常应尽可能避免过度增加超时。

相关问题