Почему продюсер в пикафке такой медленный?
Я написал простой продюсер, используя 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"?! Почему это будет спать?
1 ответ
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")