【问题标题】:apache kafka multiple producer vs single producer performanceapache kafka 多生产者与单生产者性能
【发布时间】:2017-01-02 10:35:59
【问题描述】:

我有 kafka 集群,在一台机器上有 12 个代理,在同一台机器上有一个 zookeeper 我使用 kafka-python 来生成消息

producer = KafkaProducer(bootstrap_servers='localhost:9092'  , acks=0 , linger_ms=10000 , batch_size=2000000 , buffer_memory=1003554432)

for i in range(50000):

    #50 Bytes message
    msg= 'FDASFAFAFAFAFADDFASFADFAFDASFAFFFFFFFFFFFFFFFFFFF'

    #my_topic has 12 partitions , kafka cluster has 12 brokers in single machine
    producer.send('my_topic', msg)

当我运行我的 python 代码时,我实现了 20,000 的吞吐量(每秒消息数) 但是,当我同时运行多个相同的 python 代码时,我实现了相同的吞吐量(每秒 20,000 条消息)

当我运行单个生产者时如何获得更好的吞吐量??

我测试了许多 batch.size 和 linger.ms 值,但我无法获得更好的性能

【问题讨论】:

  • 可能想看看其他一些 Kafka python 基准,看看你是如何比较的。在同一台机器上运行 12 个代理和一个 zookeeper 对性能来说并不是一个很好的配置。检查您的消息是否确实发送到所有 12 个分区,并且一次没有遇到瓶颈。 activisiongamescience.github.io/2016/06/15/…
  • @HansJespersen confluent 效果更好,我每秒 50,000 与 conluent kafka,谢谢你的回答

标签: apache-kafka


【解决方案1】:

Kafka 生产者的性能取决于 Kafka 集群,在您的代码中,您不断尝试将消息发布到 Kafka。通过我的工具进行性能测试时,我也有同样的经历。如果 Kafka 集群的容量较低,则并行生产者不会增加吞吐量。 如果 Kafka 集群有更多的容量,那么更多的生产者将导致产生更多的消息。

使用单独的 zookeeper 集群设置适当的 Kafka 集群(在 3 台 16 GB 内存的不同机器中至少有 3 个代理,一些好的 cpu),正确划分主题(更多分区)并在 Kafka 代理之间复制。现在,如果您测试您的生产者代码,它会按预期工作。

【讨论】:

  • 其实我对使用不同的物理服务器有一些限制。目前,我只有一台好的服务器,我必须在其中运行虚拟机,关键是瓶颈不是 Kafka 集群,Kafka-produer-perf-test.sh 达到 100.000 条消息/每秒,我意识到我使用的生产者工作不完美,所以我改变了我的库(使用 Confluent Kafka python)我取得了更好的性能,我现在很高兴:))
猜你喜欢
  • 2020-02-09
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多