gpt4 book ai didi

python - 如何在 Kafka 中实现请求-回复(同步)消息传递范式?

转载 作者:行者123 更新时间:2023-12-03 17:10:17 25 4
gpt4 key购买 nike

我将在我的应用程序中使用 Kafka 作为消息代理。此应用程序完全使用 Python 编写。对于此应用程序的一部分(登录和身份验证),我需要实现一个请求-回复消息传递系统。换句话说,生产者需要同步地从消费者那里得到生产消息的响应。
使用 Kafka 及其 Python 库 (kafka-python, ...) 是否可行?

最佳答案

我面临同样的问题(在我的情况下请求回复 HTTP 命中)
我的第一个赌注是(100% python ):

  • 启动消费者线程,
  • 发布请求消息(包括 request_id)
  • 加入消费者线程
  • 从消费者线程中获取答案
    消费者线程订阅回复主题(寻求结束)并处理收到的消息,直到找到 request_id(模超时)

  • 如果它适用于基本测试,不幸的是,创建 KafkaConsumer 对象是一个缓慢的过程(约 300 毫秒),因此它不是具有大量流量的系统的选项。
    此外,如果您的系统处理并行请求-回复(例如,像 Web 服务器一样的多线程),您需要创建一个专用于 request_id 的 KafkaConsumer(基本上通过使用 request_id 作为 consumer_group)以避免回复线程 A 发布的请求被线程 B 消耗(并忽略)。
    所以你不能在这里回收你的 KafkaConsumer 并且必须为每个请求支付创建时间(除了后端的处理时间)。
    如果您的请求-回复处理不可并行化,您可以尝试保持 KafkaConsuser 对象可用于线程开始获取答案
    此时我能看到的唯一解决方案是使用数据库(关系/noSQL):
  • 请求者将 request_id 存储在 DB(尽可能本地) aznd 在 kafka 中发布请求
  • 请求者轮询数据库直到找到 request_id 的答案
    同时,消费者进程接收来自回复主题的消息并将结果存储在 DB
  • 中。

    但是我不喜欢轮询......它会在庞大的流量系统中对数据库产生沉重的负载
    我的 2CTS

    关于python - 如何在 Kafka 中实现请求-回复(同步)消息传递范式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64748185/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com