Kafka压力测试

一、Kafka压测

用Kafka官方自带的脚本,对Kafka进行压测。Kafka压测时,可以查看到哪个地方出现了瓶颈(CPU,内存,网络IO)。一般都是网络IO达到瓶颈

使用的两个脚本为kafka-consumer-perf-test.sh和kafka-producer-perf-test.sh,脚本的位置在$KAFKA_HOME/bin目录下。

二、脚本使用

2.1Kafka Producer压力测试(kafka-producer-perf-test.sh)

(1)使用方式

usage: producer-performance [-h] --topic TOPIC --num-records NUM-RECORDS [--payload-delimiter PAYLOAD-DELIMITER] --throughput THROUGHPUT
                            [--producer-props PROP-NAME=PROP-VALUE [PROP-NAME=PROP-VALUE ...]] [--producer.config CONFIG-FILE] [--print-metrics]
                            [--transactional-id TRANSACTIONAL-ID] [--transaction-duration-ms TRANSACTION-DURATION] (--record-size RECORD-SIZE |
                            --payload-file PAYLOAD-FILE)

(2)参数介绍

optional arguments:
           -h, --help             查看帮助
          --topic TOPIC           topic
          --num-records NUM-RECORDS  产生的消息数量
          --payload-delimiter PAYLOAD-DELIMITER  当指定--payload-file参数时,可以提供分割符,注意:如果没有--payload-file                                                                                     参数,该参数不会生效,默认是\n
          --throughput THROUGHPUT  每秒的吞吐量,即每秒多少条消息
          --producer-props PROP-NAME=PROP-VALUE [PROP-NAME=PROP-VALUE ...]   kafka生产者相关的配置属性,比如                                                                         bootstrap.servers,client.id 等等,该参数指定的配置参数比--producer.config指定的                                                                       配置参数优先级高
         --producer.config CONFIG-FILE  生产者的配置文件
         --print-metrics        在最后输出测试的指标 (默认: false)

         --record-size RECORD-SIZE  消息的字节大小,注意:只能提供 --record-size 和--payload-file其中的一个参数,不可以全                                                           部都指定
        --payload-file PAYLOAD-FILE   读取消息的文件,必须是 UTF-8编码的文本文件。
                       注意: --record-size和--payload-file参数,是必须要指定的,但只能指定其中的一个参数,不可以全部指定。

(3)测试

 bin/kafka-producer-perf-test.sh  --topic test  --print-metrics --record-size 100 --num-records 100000 --throughput 1000  --producer-props bootstrap.servers=kms-2:9092,kms-3:9092,kms-4:9092  


说明:record-size是一条信息有多大,单位是字节。num-records是总共发送多少条信息。throughput 是每秒多少条信息。

测试结果:

分析:本例中一共写入10w条消息,每秒向Kafka写入了0.10MB的数据,平均是999.99条消息/秒,每次写入的平均延迟为13.84毫秒,最大的延迟为793毫秒。

2.2Kafka Consumer压力测试(kafka-consumer-perf-test.sh)

Consumer的测试,如果这四个指标(IO,CPU,内存,网络)都不能改变,考虑增加分区数来提升性能。

(1)参数介绍:                             
            --broker-list <String: host>             REQUIRED: kafka  server 
            --consumer.config <String: config file>  消费者配置文件      
            --date-format <String: date format>      日期格式 见 java.text.SimpleDateFormat . (默认: yyyy-MM-dd HH:mm:ss:SSS)   
            --fetch-size <Integer: size>             一次请求提取的数据量   (默认: 1048576)   
           --from-latest                           如果消费者还没有建立偏移量,则从最新的消息开始消费,而不是最早的消息                   
           --group <String: gid>                    消费者组id (默认:  perf-consumer-69057)                 
           --help                                  帮助信息                        
           --hide-header                            如果设置,将不会打印状态头信息
            --messages <Long: count>                 REQUIRED: 发送或者消费的消息数量
            --num-fetch-threads <Integer: count>     抓取的线程数量 (default: 1)
            --print-metrics                          打印指标                            
          --threads <Integer: count>               处理的线程数  (default: 10)                        
         --timeout [Long: milliseconds]          允许返回数据的最大超时时间(default: 10000)            
           --topic <String: topic>                  REQUIRED: 消费的主题

(2)测试

 bin/kafka-consumer-perf-test.sh  --broker-list kms-2:9092,kms-3:9092,kms-4:9092    --topic test --fetch-size 10000 --messages 10000000 --threads 1

--topic 指定topic的名称
--fetch-size 指定每次fetch的数据的大小
--messages 总共要消费的消息个数

       测试结果:

    结果分析

开始测试时间start.time:2019-08-07 23:10:20:560

结束时间end.time:2019-08-07 23:10:34:785 

最大吞吐率data.consumed.in.MB: 9.5367MB/s

平均每秒消费MB.sec:0.6704MB/s

最大每秒消费100000条 data.consumed.in.nMsg:100000

平均每秒消费21722.4153条 nMsg.sec:7029.8770条

 rebalance.time.ms:192

fetch.time.ms:14033

fetch.MB.sec:0.6796

fetch.nMsg.sec:7126.0600

-------------------------------------The end----------------------------------

posted @ 2019-08-07 23:27  大数据技术与数仓  阅读(963)  评论(0编辑  收藏  举报