python - 为什么pykafka的生产者这么慢?

标签 python kafka-producer-api pykafka

我使用 pykafka 编写了一个简单的生产者,但似乎无法让它执行。基本的生产者和生产调用如下。当我使用一条小消息调用此函数 100 次,并添加一些计时/分析代码时,大约需要 14 秒。我知道这是异步发送消息,所以我希望它的速度非常快。我缺少一些设置吗?我还尝试过使用 min_queued_messages=1 ,这需要大约 2 秒的时间。

from pykafka import KafkaClient
import time

client = KafkaClient(hosts="kafka1.mydomain.com:9092", exclude_internal_topics=False)
topic = client.topics['mytopic']

start = time.time()

for x in xrange(100):
    with topic.get_producer(delivery_reports=False,
                            sync=True,
                            linger_ms=0) as producer:
        producer.produce("This is a message")

end = time.time()
print "Execution Time (ms): %s" % round((end - start) * 1000)

我确实在 pycharm 中对此进行了分析,并且说 78.8% 的时间花费在“time.sleep”上?!为什么它会 sleep ?

最佳答案

topic.get_ Producer 调用应该在生产者生命周期开始时调用一次。像示例代码那样在紧密循环中调用它会导致初始化序列重复运行,这是不必要的,并且会增加大量开销。如果将代码更改为以下内容,您的代码将会运行得更快:

with topic.get_producer(delivery_reports=False,
                        sync=True,
                        linger_ms=0) as producer:
    for x in xrange(100):
        producer.produce("This is a message")

关于python - 为什么pykafka的生产者这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49616402/

相关文章:

python - 使用 Django 模型创建子类别

python - 如何重新索引多索引 pandas 数据框?

apache-kafka - 如何在不消费的情况下读取来自kafka消费组的消息?

python - 如何在 Pykafka simpleconsumer 中选择起始偏移量?

python - 如何在 Python3 中作为类的一部分正确调用 __setattr__()?

python - 使用reset_job方法时为"Invalid JSON given in the body of the request - expected a map"

java - 如何检查 Kafka Server 是否正在运行?

apache-kafka - 在汇合模式注册表中自动注册模式或手动注册哪个更好?

linux - kafka logs + 如何限制日志大小

python - PyKafka 元数据以字节而不是字符串为单位