pykafka 写消息时速度极慢,只有 10 mgs / s 正常么?

2016-09-07 14:17:24 +08:00
 996635
# coding:utf=8

from pykafka.client import KafkaClient
import logging
import json
import time

logging.basicConfig(level= logging.WARNING)

produce_logger = logging.getLogger('prodrcer')


def kafka(use_rdkafka=False):
    client = KafkaClient('192.168.109.58:9092,192.168.109.70:9092,192.168.109.91:9092')

    produce_start = time.time()
    topic = client.topics['meteor_spider_article_dev']

    # producer = topic.get_producer(sync=True, use_rdkafka=use_rdkafka)

    msg_body = {
        'article_id': 1,
        "title": "标题",
        "subtitle": "副标题",
    }
    msg = json.dumps(msg_body)
    with topic.get_sync_producer() as producer:
        for i in range(0, 1000):
            producer.produce(msg)

    producer.stop()

    return time.time() - produce_start


def calculate_thoughput(timing, n_messages=1000, msg_size=5956):
    print("Processed {0} messsages in {1:.2f} seconds".format(n_messages, timing))
    print("{0:.2f} MB/s".format((msg_size * n_messages) / timing / (1024*1024)))
    print("{0:.2f} Msgs/s".format(n_messages / timing))

if __name__ == '__main__':
    calculate_thoughput(kafka())

Processed 1000 messsages in 76.68 seconds 0.07 MB/s 13.04 Msgs/s

这速度 怎么回事?

7751 次点击
所在节点    Kafka
5 条回复
sylecn
2016-09-07 14:41:58 +08:00
topic.get_sync_producer()

虽然还没有用过 kafka ,但是这种压力测试应该都用 async 模式来发消息吧。如果用同步,起码开多线程一起发。
要不然一个一个等反馈多慢啊。
reAsOn
2016-09-07 14:47:30 +08:00
用过 kafka-python 的库,性能可以接受,需要用异步发送 + batch
996635
2016-09-07 14:50:18 +08:00
@sylecn
@reAsOn

我 python -m cProfile 运行了一下,发现居然会有 time.sleep 在调用栈里

```
4064 0.002 0.000 0.002 0.000 {thread.get_ident}
8 0.000 0.000 0.000 0.000 {thread.start_new_thread}
6615 68.400 0.010 68.400 0.010 {time.sleep}
8616 0.006 0.000 0.006 0.000 {time.time}

```
est
2016-09-07 15:13:35 +08:00
kafka 至少有 3 个 py 库,各自实现都不同。需要仔细判别。
tongle
2016-09-07 15:50:51 +08:00
Using the librdkafka extension 试试这个

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/304545

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX