kafka集群的性能受限于JVM参数、服务器的硬件配置以及kafka的配置,因此需要对所要部署kafka的机器进行性能测试,根据测试结果,找出符合业务需求的最佳配置。

1、kafka broker jVM参数
kafka broker jVM 是由脚本kafka-server-start.sh中参数KAFKA_HEAP_OPTS来控制的,如果不设置,默认是1G
可以在首行添加KAFKA_HEAP_OPTS配置,注意如果要使用G1垃圾回收器,堆内存最小4G,jdk至少jdk7u51以上
举例:
export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G -Xmn2G -XX:PermSize=64m -XX:MaxPermSize=128m -XX:SurvivorRatio=6 -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly"

2、kafka集群性能测试工具 (基于kafka_2.11-0.11.0.0)
kafka自带的测试工具:针对生产者的kafka-producer-perf-test.sh和针对消费者的kafka-consumer-perf-test.sh
2.1 kafka-producer-perf-test.sh
参数说明:
--help 显示帮助
--topic  topic名称
--record-size       每条消息的字节数
--throughput        消息吞吐量,每秒钟发送的消息数
--producer-props    生产者相关的配置属性, 如bootstrap.servers,client.id等,这些配置优先于--producer.config
--producer.config 生产者配置文件,producer.properties
--print-metrics 在测试结束时打印出度量值。(默认值: false)
--num-records       总共需要发送的消息数量
--payload-file 要发送消息所在的文件名,文件里是要发送消息数据,与num-records两者至少选一个
--payload-delimiter payload-file中消息分隔符
--transactional-id 用于测试并发事务的性能 (默认值:performance-producer-default-transactional-id)
--transaction-duration-ms 事务最大值,当超过这个时间 就会提交事务 (默认值: 0)

举例:
./bin/kafka-producer-perf-test.sh --topic test-pati3-rep2 --throughput 500000 --num-records 1500000 --record-size 1000 --producer.config config/producer.properties --producer-props bootstrap.servers=10.1.8.16:9092,10.1.8.15:9092,10.1.8.14:9092 acks=1

测试维度:可以调整JVM、分区数、副本数、throughput--吞吐量、record-size--消息大小、acks--副本响应模式、compression-codec--压缩方式

[cluster@PCS101 bin]$ ./kafka-producer-perf-test.sh --topic REC-CBBO-MSG-TOPIC --throughput 50000 --num-records 150000 --record-size 102400 --producer-props bootstrap.servers=134.32.123.101:9092,134.32.123.102:9092,134.32.123.103:9092 acks=all --print-metrics
12786 records sent, 2556.7 records/sec (249.68 MB/sec), 122.1 ms avg latency, 231.0 max latency.
14827 records sent, 2965.4 records/sec (289.59 MB/sec), 109.4 ms avg latency, 291.0 max latency.
14587 records sent, 2917.4 records/sec (284.90 MB/sec), 111.6 ms avg latency, 374.0 max latency.
14292 records sent, 2858.4 records/sec (279.14 MB/sec), 114.8 ms avg latency, 389.0 max latency.
14557 records sent, 2910.8 records/sec (284.26 MB/sec), 112.3 ms avg latency, 354.0 max latency.
14524 records sent, 2904.2 records/sec (283.62 MB/sec), 113.1 ms avg latency, 362.0 max latency.
14686 records sent, 2937.2 records/sec (286.84 MB/sec), 111.4 ms avg latency, 348.0 max latency.
14637 records sent, 2927.4 records/sec (285.88 MB/sec), 111.8 ms avg latency, 378.0 max latency.
15186 records sent, 3037.2 records/sec (296.60 MB/sec), 107.9 ms avg latency, 343.0 max latency.
14584 records sent, 2916.2 records/sec (284.79 MB/sec), 112.4 ms avg latency, 356.0 max latency.
150000 records sent, 2888.170055 records/sec (282.05 MB/sec), 112.78 ms avg latency, 389.00 ms max latency, 11 ms 50th, 321 ms 95th, 340 ms 99th, 375 ms 99.9th.

最后一条记录是个总体统计:发送的总记录数,平均的TPS(每秒处理的消息数),平均延迟,最大延迟, 然后我们将发送记录数最小的那一行作为生产者瓶颈(红色记录)

如果加上--print-metrics  最后会打印metrics统计信息:

Metric Name                                                                                 Value
kafka-metrics-count:count:{client-id=producer-} : 84.000
producer-metrics:batch-size-avg:{client-id=producer-} : 102472.000
producer-metrics:batch-size-max:{client-id=producer-} : 102472.000
producer-metrics:batch-split-rate:{client-id=producer-} : 0.000
producer-metrics:buffer-available-bytes:{client-id=producer-} : 33554432.000
producer-metrics:buffer-exhausted-rate:{client-id=producer-} : 0.000
producer-metrics:buffer-total-bytes:{client-id=producer-} : 33554432.000
producer-metrics:bufferpool-wait-ratio:{client-id=producer-} : 0.857
producer-metrics:compression-rate-avg:{client-id=producer-} : 1.000
producer-metrics:connection-close-rate:{client-id=producer-} : 0.000
producer-metrics:connection-count:{client-id=producer-} : 5.000
producer-metrics:connection-creation-rate:{client-id=producer-} : 0.091
producer-metrics:incoming-byte-rate:{client-id=producer-} : 87902.611
producer-metrics:io-ratio:{client-id=producer-} : 0.138
producer-metrics:io-time-ns-avg:{client-id=producer-} : 69622.263
producer-metrics:io-wait-ratio:{client-id=producer-} : 0.329
producer-metrics:io-wait-time-ns-avg:{client-id=producer-} : 166147.404
producer-metrics:metadata-age:{client-id=producer-} : 55.104
producer-metrics:network-io-rate:{client-id=producer-} : 1557.405
producer-metrics:outgoing-byte-rate:{client-id=producer-} : 278762290.882
producer-metrics:produce-throttle-time-avg:{client-id=producer-} : 0.000
producer-metrics:produce-throttle-time-max:{client-id=producer-} : 0.000
producer-metrics:record-error-rate:{client-id=producer-} : 0.000
producer-metrics:record-queue-time-avg:{client-id=producer-} : 110.963
producer-metrics:record-queue-time-max:{client-id=producer-} : 391.000
producer-metrics:record-retry-rate:{client-id=producer-} : 0.000
producer-metrics:record-send-rate:{client-id=producer-} : 2724.499
producer-metrics:record-size-avg:{client-id=producer-} : 102487.000
producer-metrics:record-size-max:{client-id=producer-} : 102487.000
producer-metrics:records-per-request-avg:{client-id=producer-} : 3.493
producer-metrics:request-latency-avg:{client-id=producer-} : 7.011
producer-metrics:request-latency-max:{client-id=producer-} : 56.000
producer-metrics:request-rate:{client-id=producer-} : 778.702
producer-metrics:request-size-avg:{client-id=producer-} : 357989.537
producer-metrics:request-size-max:{client-id=producer-} : 614940.000
producer-metrics:requests-in-flight:{client-id=producer-} : 0.000
producer-metrics:response-rate:{client-id=producer-} : 778.731
producer-metrics:select-rate:{client-id=producer-} : 1979.326
producer-metrics:waiting-threads:{client-id=producer-} : 0.000
producer-node-metrics:incoming-byte-rate:{client-id=producer-, node-id=node--} : 19.601
producer-node-metrics:incoming-byte-rate:{client-id=producer-, node-id=node--} : 3.956
producer-node-metrics:incoming-byte-rate:{client-id=producer-, node-id=node-} : 31220.396
producer-node-metrics:incoming-byte-rate:{client-id=producer-, node-id=node-} : 29885.883
producer-node-metrics:incoming-byte-rate:{client-id=producer-, node-id=node-} : 26920.163
producer-node-metrics:outgoing-byte-rate:{client-id=producer-, node-id=node--} : 1.324
producer-node-metrics:outgoing-byte-rate:{client-id=producer-, node-id=node--} : 0.436
producer-node-metrics:outgoing-byte-rate:{client-id=producer-, node-id=node-} : 98518580.943
producer-node-metrics:outgoing-byte-rate:{client-id=producer-, node-id=node-} : 82114190.903
producer-node-metrics:outgoing-byte-rate:{client-id=producer-, node-id=node-} : 98518948.091
producer-node-metrics:request-latency-avg:{client-id=producer-, node-id=node--} : 0.000
producer-node-metrics:request-latency-avg:{client-id=producer-, node-id=node--} : 0.000
producer-node-metrics:request-latency-avg:{client-id=producer-, node-id=node-} : 6.891
producer-node-metrics:request-latency-avg:{client-id=producer-, node-id=node-} : 5.135
producer-node-metrics:request-latency-avg:{client-id=producer-, node-id=node-} : 11.202
producer-node-metrics:request-latency-max:{client-id=producer-, node-id=node--} : -Infinity
producer-node-metrics:request-latency-max:{client-id=producer-, node-id=node--} : -Infinity
producer-node-metrics:request-latency-max:{client-id=producer-, node-id=node-} : 56.000
producer-node-metrics:request-latency-max:{client-id=producer-, node-id=node-} : 46.000
producer-node-metrics:request-latency-max:{client-id=producer-, node-id=node-} : 55.000
producer-node-metrics:request-rate:{client-id=producer-, node-id=node--} : 0.036
producer-node-metrics:request-rate:{client-id=producer-, node-id=node--} : 0.018
producer-node-metrics:request-rate:{client-id=producer-, node-id=node-} : 279.365
producer-node-metrics:request-rate:{client-id=producer-, node-id=node-} : 340.136
producer-node-metrics:request-rate:{client-id=producer-, node-id=node-} : 160.233
producer-node-metrics:request-size-avg:{client-id=producer-, node-id=node--} : 36.500
producer-node-metrics:request-size-avg:{client-id=producer-, node-id=node--} : 24.000
producer-node-metrics:request-size-avg:{client-id=producer-, node-id=node-} : 352658.869
producer-node-metrics:request-size-avg:{client-id=producer-, node-id=node-} : 241415.634
producer-node-metrics:request-size-avg:{client-id=producer-, node-id=node-} : 614858.709
producer-node-metrics:request-size-max:{client-id=producer-, node-id=node--} : 49.000
producer-node-metrics:request-size-max:{client-id=producer-, node-id=node--} : 24.000
producer-node-metrics:request-size-max:{client-id=producer-, node-id=node-} : 614940.000
producer-node-metrics:request-size-max:{client-id=producer-, node-id=node-} : 512460.000
producer-node-metrics:request-size-max:{client-id=producer-, node-id=node-} : 614940.000
producer-node-metrics:response-rate:{client-id=producer-, node-id=node--} : 0.036
producer-node-metrics:response-rate:{client-id=producer-, node-id=node--} : 0.018
producer-node-metrics:response-rate:{client-id=producer-, node-id=node-} : 279.486
producer-node-metrics:response-rate:{client-id=producer-, node-id=node-} : 340.284
producer-node-metrics:response-rate:{client-id=producer-, node-id=node-} : 160.233
producer-topic-metrics:byte-rate:{client-id=producer-, topic=REC-CBBO-MSG-TOPIC} : 279184829.991
producer-topic-metrics:compression-rate:{client-id=producer-, topic=REC-CBBO-MSG-TOPIC} : 1.000
producer-topic-metrics:record-error-rate:{client-id=producer-, topic=REC-CBBO-MSG-TOPIC} : 0.000
producer-topic-metrics:record-retry-rate:{client-id=producer-, topic=REC-CBBO-MSG-TOPIC} : 0.000
producer-topic-metrics:record-send-rate:{client-id=producer-, topic=REC-CBBO-MSG-TOPIC} : 2724.548

2.2 kafka-consumer-perf-test.sh
参数说明:
--help 显示帮助
--batch-size 在单个批处理中写入的消息数。(默认值: 200)
--broker-list 使用新的消费者是必需的,如果使用老的消费者就不是必需的
--supported codec 压缩方式 NoCompressionCodec 为 0(默认0不压缩), GZIPCompressionCodec 为 1, SnappyCompressionCodec 为 2, LZ4CompressionCodec 为3
--consumer.config 指定消费者配置文件 consumer.properties
--date-format 用于格式化时间字段的格式化字符串 (默认: yyyy-MM-dd HH:mm:ss:SSS)
--fetch-size 单个消费请求获取的数据字节量(默认: 1048576 (1M))
--from-latest 如果消费者还没有已建立的偏移量, 就从日志中的最新消息开始, 而不是最早的消息。
--group 消费者组id (默认值: perf-consumer-29512)
--hide-header 跳过打印数据头的统计信息
--message-size 每条消息大小(默认: 100字节)
--messages 必需,要获取的消息总数量
--new-consumer 使用新的消费者 这是默认值
--num-fetch-threads 获取消息的线程数 (默认: 1)
--print-metrics 打印出指标。这只适用于新的消费者。
--reporting-interval 打印报告信息的间隔 (以毫秒为单位,默认值: 5000)
--show-detailed-stats 根据报告间隔配置的每个报告间隔报告统计信息。
--socket-buffer-size TCP 获取信息的缓存大小(默认: 2097152 (2M))
--threads 处理线程数 (默认: 10)
--topic 必需 主题名称
--zookeeper zk清单,当使用老的消费者时必需

测试维度:调整以上参数值

[cluster@PCS101 bin]$ ./kafka-consumer-perf-test.sh --topic REC-CBBO-MSG-TOPIC --messages 500000 --message-size 102400 --batch-size 50000 --fetch-size 1048576 --num-fetch-threads 17 --threads 10 --zookeeper 134.32.123.101:2181,134.32.123.102:2181,134.32.123.103:2181 --print-metrics
start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec
2018-10-01 09:50:43:707, 2018-10-01 09:51:40:553, 84487.7018, 1486.2559, 874167, 15377.8102

消费者瓶颈:1486.2559 MB.sec,15377nMsg.sec

3、可视化性能分析工具-Kafka Manager(Yammer Metrics)

--后续更新

【kafka学习之四】kafka集群性能测试的更多相关文章

  1. kafka学习总结之集群部署和zookeeper

    1.  集群部署 kafka集群的瓶颈主要在网络和磁盘上:kafka依赖于zookeeper,zookeeper集群的节点采用奇数个,3个节点允许一个节点失败,5个节点允许2个节点失败. 图 1 ka ...

  2. kafka学习(二)-zookeeper集群搭建

    zookeeper概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 服务等.Zookeeper是h ...

  3. Kafka学习之四 Kafka常用命令

    Kafka常用命令 以下是kafka常用命令行总结: 1.查看topic的详细信息 ./kafka-topics.sh -zookeeper 127.0.0.1:2181 -describe -top ...

  4. ELK+Kafka学习笔记之搭建ELK+Kafka日志收集系统集群

    0x00 概述 关于如何搭建ELK部分,请参考这篇文章,https://www.cnblogs.com/JetpropelledSnake/p/9893566.html. 该篇用户为非root,使用用 ...

  5. Kafka设计解析(十七)Kafka 0.11客户端集群管理工具AdminClient

    转载自 huxihx,原文链接 Kafka 0.11客户端集群管理工具AdminClient 很多用户都有直接使用程序API操作Kafka集群的需求.在0.11版本之前,kafka的服务器端代码(即添 ...

  6. 在Centos 7上安装配置 Apche Kafka 分布式消息系统集群

    Apache Kafka是一种颇受欢迎的分布式消息代理系统,旨在有效地处理大量的实时数据.Kafka集群不仅具有高度可扩展性和容错性,而且与其他消息代理(如ActiveMQ和RabbitMQ)相比,还 ...

  7. CentOS7.4搭建kafka单结点和集群

    操作系统选择 CentOS7.4x86-64(操作系统的x86_64是跟CPU有关的,最早AMD公司开发出了一款向下兼容x86CPU,向上又扩充了指令集,具有了64位CPU的特性,这款CPU后来改名为 ...

  8. Kafka的3节点集群详细启动步骤(Zookeeper是外装)

    首先,声明,kafka集群是搭建在hadoop1.hadoop2和hadoop3机器上. kafka_2.10-0.8.1.1.tgz的1或3节点集群的下载.安装和配置(图文详细教程)绝对干货 如下分 ...

  9. RabbitMQ和Kafka的高可用集群原理

    前言 小伙伴们,通过前边文章的阅读,相信大家已经对RocketMQ的基本原理有了一个比较深入的了解,那么大家对当前比较常用的RabbitMQ和Kafka是不是也有兴趣了解一些呢,了解的多一些也不是坏事 ...

随机推荐

  1. 【BZOJ4445】[Scoi2015]小凸想跑步 半平面交

    [BZOJ4445][Scoi2015]小凸想跑步 Description 小凸晚上喜欢到操场跑步,今天他跑完两圈之后,他玩起了这样一个游戏. 操场是个凸n边形,N个顶点按照逆时针从0-n-l编号.现 ...

  2. mock server搭建及接口测试简单实例

    一.搭建mock server mock工具很多,这里我们选择用简单易操作的moco服务器 使用前必须先安装java,去相关网站下载Standalone Moco Runner 二.使用mock se ...

  3. 兵器簿之cocoaPods的安装和使用

    以前添加第三方库的时候总是直接去Github下载然后引入,但是如果这些第三方库发生了更新,我们还需要手动去更新项目,所以现在引入之前一直想弄都一直没有弄的cocoaPods,现在演示一把过程 其实非常 ...

  4. 生存分析(survival analysis)

    一.生存分析(survival analysis)的定义 生存分析:对一个或多个非负随机变量进行统计推断,研究生存现象和响应时间数据及其统计规律的一门学科. 生存分析:既考虑结果又考虑生存时间的一种统 ...

  5. 2018牛客网暑期ACM多校训练营(第五场) F - take - [数学期望][树状数组]

    题目链接:https://www.nowcoder.com/acm/contest/143/F 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...

  6. HDU 3746 - Cyclic Nacklace & HDU 1358 - Period - [KMP求最小循环节]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...

  7. First normal formal Second normal form

    https://en.wikipedia.org/wiki/First_normal_form https://en.wikipedia.org/wiki/Second_normal_form A r ...

  8. 浏览器指纹 - HTTP cookie 浏览器指纹 欺诈检测 浏览器id hash 浏览器插件信息 canvas 字体信息

    详解浏览器cookie和浏览隐私之间的关系http://www.iefans.net/cookie-yinsi-guanxi/ 详解浏览器cookie和浏览隐私之间的关系 浏览器相关 互联网 2013 ...

  9. angularJS module里的'服务'

    首先,为了举栗子,先写好如下的模型,控制器,html: html: <!DOCTYPE html> <html ng-app="serviceApp"> & ...

  10. SQLSERVER 函数大全

    转自:http://blog.csdn.net/travylee/article/details/7216481 SQL2008 表达式:是常量.变量.列或函数等与运算符的任意组合. 1. 字符串函数 ...