2017-01-02 137 views
0

我有在一臺機器12周的經紀人和在同一臺機器 一個動物園管理員卡夫卡簇I使用卡夫卡-蟒生成消息阿帕奇卡夫卡多個生產者VS單生產者性能

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代碼時,我達到相同的吞吐量(每秒20000個信息)

當我運行單個生產者時,如何實現更好的吞吐量?

我測試許多batch.size和linger.ms值,但我不能獲得更好的性能

+0

可能想看看其他一些卡夫卡python基準測試,看看你如何比較。在同一臺機器上同時運行12個經紀人和一個動物園管理員也不是一個很好的性能配置。檢查你的郵件實際上是否會分配給所有12個分區,而不是一次一個瓶頸。 http://activisiongamescience.github.io/2016/06/15/Kafka-Client-Benchmarking/ –

+0

@HansJespersen融合效果更好,我與合流kafka每秒50,000,謝謝你的回答 –

回答

1

卡夫卡生產的性能取決於卡夫卡羣集上,在你的代碼中不斷嘗試的消息發佈到卡夫卡。我通過我的工具進行性能測試時也有相同的經驗。如果Kafka集羣的容量較低,那麼平行生產者的吞吐量不會增加。 如果Kafka集羣擁有更多容量,那麼更多的生產者將導致更多的消息被生成。

使用單獨的zookeeper集羣設置正確的Kafka集羣(在3個差異機器上16 GB內存,一些很好的CPU的最小3個代理),讓主題正確分配(更多分區)並跨卡夫卡經紀人進行復制。現在,如果你測試你的生產者代碼,它會按預期工作。

+0

其實我有一些限制使用不同的物理服務器。現在,我只有一臺優秀的服務器,我必須在其中運行虛擬機,關鍵是瓶頸不是Kafka集羣,Kafka-produer-perf-test.sh實現100.000條消息/每秒,並且我意識到我使用的製作者並不完美,所以我改變我的庫(使用Confluent Kafka python)我獲得了更好的性能,現在我很開心:)) –