大家
我是卡夫卡的新手。我正在为一个 python 模块编写代码,该模块将处理来自 Kafka 的消息。该模块将使用 docker 进行容器化。该模块将读取 Kafka 消息,进行一些涉及大量 I/O 的处理,然后将 Kafka 消息发送到另一个主题。该模块预计每秒接收大量消息(例如 100 条)。每条消息大约需要 3 秒来处理,这意味着我将需要很多容器来处理这些消息,但我想提高每个容器的利用率,以减少总体容器的数量并降低成本。我想到了两种方法:
Asyncio
进行并发处理。for msg in KafkaConsumer:
#call async method to process the msg
processMSG(msg)
await processMSG
我认为这不是一个很好的方法,因为它会在
processMSG
运行时阻止侦听器。
我不确定我的思维过程是否朝着正确的方向发展,所以如果有人能帮助指导我采取更好的方法来提高服务器利用率,我将不胜感激。
如果您的约束是 Python,那么使用 asyncio 是最好的方法,因为它在 I/O 上循环抢夺每个容器的线程,这比在消息完全处理之前阻塞进程要快得多。
请注意,Python 没有真正的多线程,同一时刻只有一个线程运行。了解 Python 中的 GIL。
另一方面,如果您确实不需要使用 Python,JavaScript 更适合您的需求,因为它具有非阻塞架构,可能会提高您的性能。