在Python中处理来自Kafka的消息的最佳方式

问题描述 投票:0回答:1

大家
我是卡夫卡的新手。我正在为一个 python 模块编写代码,该模块将处理来自 Kafka 的消息。该模块将使用 docker 进行容器化。该模块将读取 Kafka 消息,进行一些涉及大量 I/O 的处理,然后将 Kafka 消息发送到另一个主题。该模块预计每秒接收大量消息(例如 100 条)。每条消息大约需要 3 秒来处理,这意味着我将需要很多容器来处理这些消息,但我想提高每个容器的利用率,以减少总体容器的数量并降低成本。我想到了两种方法:

  1. 使用
    Asyncio
    进行并发处理。
for msg in KafkaConsumer:
    #call async method to process the msg
    processMSG(msg)
    await processMSG

我认为这不是一个很好的方法,因为它会在

processMSG
运行时阻止侦听器。

  1. 使用多线程并行处理请求。

我不确定我的思维过程是否朝着正确的方向发展,所以如果有人能帮助指导我采取更好的方法来提高服务器利用率,我将不胜感激。

apache-kafka kafka-consumer-api
1个回答
0
投票

如果您的约束是 Python,那么使用 asyncio 是最好的方法,因为它在 I/O 上循环抢夺每个容器的线程,这比在消息完全处理之前阻塞进程要快得多。

请注意,Python 没有真正的多线程,同一时刻只有一个线程运行。了解 Python 中的 GIL。

另一方面,如果您确实不需要使用 Python,JavaScript 更适合您的需求,因为它具有非阻塞架构,可能会提高您的性能。

© www.soinside.com 2019 - 2024. All rights reserved.