[转帖]关于kafka压力测试(使用官方自带脚本测试)

关于,kafka,压力,测试,使用,官方,自带,脚本 · 浏览次数 : 0

小编点评

**文章目录** 1. kafka官方自带压测脚本文件 - kafka-producer-perf-test.sh - kafka-consumer-perf-test.sh 2. kafka-producer-perf-test.sh 测试命令 - 参数说明 - --topic test --record-size 100 --num-records 100000 --throughput -1 --producer-props bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092 3. kafka-consumer-perf-test.sh 测试命令 - 参数说明 - --broker-list hadoop102:9092,hadoop103:9092,hadoop104:9092 --topic test --fetch-size 10000 --messages 10000000 --threads 1 4. 测试结果说明 5. 提升kafka的吞吐量 - 设置发送消息的缓冲区 - buffer.memory - 设置压缩算法 - snappy、gzip 或 1z4 - 设置批次大小 - batch.size 6. linger.ms 参数说明 - 生产者在发送批次之前等待更多消息加入批次的时间

正文

kafka官方自带压测脚本文件

在kakfa的bin目录下有很多脚本,其中有两个脚本是kafka官方自带的压力测试脚本。用来测试kafka在生产和消费中,有哪些瓶颈来限制了工作效率。

kafka-consumer-perf-test.sh
kafka-producer-perf-test.sh

Producer生产者环境测试

测试命令

bin/kafka-producer-perf-test.sh  --topic test --record-size 100 --num-records
 100000 --throughput -1 --producer-props bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092

    各个参数解释

    record-size 是一条信息有多大,单位是字节。
    num-records 是总共发送多少条信息。
    throughput 是每秒多少条信息,设成-1,表示不限流,可测出生产者最大吞吐量。

    返回测试结果

    100000 records sent, 95877.277085 records/sec (9.14 MB/sec), 187.68 ms avg latency, 424.00 ms max 
    latency, 155 ms 50th, 411 ms 95th, 423 ms 99th, 424 ms 99.9th.
    

      返回结果说明

      一共写入10w条消息
      吞吐量为9.14 MB/sec
      每次写入的平均延迟为187.68毫秒
      最大的延迟为424.00毫秒。

      Consumer消费者环境测试

      测试命令

      bin/kafka-consumer-perf-test.sh --broker-list hadoop102:9092,hadoop103:9092,
      hadoop104:9092 --topic test --fetch-size 10000 --messages 10000000  --threads 1
      

        各个参数解析

        fetch-size 指定每次fetch的数据的大小
        messages 总共要消费的消息个数
        threads 开启的线程数

        测试结果说明

        start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec
        2019-02-19 20:29:07:566, 2019-02-19 20:29:12:170, 9.5368, 2.0714, 100010, 21722.4153
        

          共消费数据9.5368MB
          吞吐量2.0714MB/s
          共消费100010条
          平均每秒消费21722.4153条

          提升kafka的吞吐量

          可通过以下的方式来提升kafka生产者的吞吐量

          buffer.memory

          该参数用来设置生产者内存缓冲区的大小,生产者用它缓冲要发送到服务器的消息。
          如果应用程序发送消息的速度超过发送到服务器的速度,会导致生产者空间不足。
          这个时候 send() 方法调用要么被阻塞,要么抛出异常,取决于如何设置 block.on.buffer.full 参数(在 0.9.0.0 版本里被替换成了 max.block.ms ,表示在抛出异常之前可以阻塞一段时间)。
          设置发送消息的缓冲区,默认值是33554432,就是32MB
          如果发送消息出去的速度小于写入消息进去的速度,就会导致缓冲区写满,此时生产消息就会阻塞住,所以说这里就应该多做一些压测,尽可能保证说这块缓冲区不会被写满导致生产行为被阻塞住

          compression.type

          默认情况下,消息发送时不会被压缩。
          该参数可以设置为 snappy 、 gzp 或 1z4 ,它指定了消息被发送给 broker 之前使用哪一种压缩算法进行压缩。
          snappy 压缩算法由 Google 发明,它占用较少的 CPU ,却能提供较好的性能和相当可观的压缩比,如果比较关注性能和网络带宽,可以使用这种算法。
          gzip 压缩算法一般会占用较多的 CPU ,但会提供更高的压缩比,所以如果网络带宽比较有限,可以使用这种算法。
          使用压缩可以降低网络传输开销和存储开销,而这往往是向 Kafka 发送消息的瓶颈所在。
          默认是none,不压缩,但是也可以使用lz4压缩,效率还是不错的,压缩之后可以减小数据量,提升吞吐量,但是会加大producer端的cpu开销。

          batch.size

          当有多个消息需要被发送到同一个分区时,生产者会把它们放在同一个批次里。
          该参数指定了一个批次可以使用的内存大小,按照字节数计算(而不是消息个数)。
          当批次被填满,批次里的所有消息会被发送出去。
          不过生产者并不一定都会等到批次被填满才发送,半满的批次,甚至只包含一个消息的批次也有可能被发送。
          所以就算把批次大小设置得很大也不会造成延退,只是会占用更多的内存而已。
          但如果设置得太小,因为生产者需要更频繁地发送消息,会增加一些额外的开销。
          设置merge batch的大小,如果 batch 太小,会导致频繁网络请求,吞吐量下降;
          如果batch太大,会导致一条消息需要等待很久才能被发送出去,而且会让内存缓冲区有很大压力,过多数据缓冲在内存里
          默认值是:16384,就是16kb,也就是一个batch满了16kb就发送出去,一般在实际生产环境,这个batch的值可以增大一些来提升吞吐量,可以自己压测一下。

          linger.ms

          该参数指定了生产者在发送批次之前等待更多消息加入批次的时间。
          KafkaProducer 会在批次填满或 linger.ms 达到上限时把批次发送出去。
          默认情况下,只要有可用的线程,生产者就会把消息发送出去,就算批次里只有一个消息。
          把 linger.ms 设置成比0大的数,让生产者在发送批次之前等待一会儿,使更多的消息加入到这个批次。
          虽然这样会增加延退,但也会提升吞吐量(因为一次性发送更多的消息,每个消息的开销就变小了)。
          这个值默认是0,意思就是消息必须立即被发送,但是这是不对的。
          一般设置一个100毫秒之类的,这样的话就是说,这个消息被发送出去后进入一个batch,如果100毫秒内,这个batch满了16kb,自然就会发送出去。
          但是如果100毫秒内,batch没满,那么也必须把消息发送出去了,不能让消息的发送延迟时间太长,也避免给内存造成过大的一个压力。

          来源: https://juejin.cn/post/6997321470594514980

          可以通过以下方法提高消费效率

          增加CPU 内存的数量,启用更多的消费组,设置更多region

          文章知识点与官方知识档案匹配,可进一步学习相关知识
          Java技能树首页概览120812 人正在系统学习中

          与[转帖]关于kafka压力测试(使用官方自带脚本测试)相似的内容:

          [转帖]关于kafka压力测试(使用官方自带脚本测试)

          文章目录 kafka官方自带压测脚本文件Producer生产者环境测试测试命令返回测试结果 Consumer消费者环境测试测试命令测试结果说明 提升kafka的吞吐量可通过以下的方式来提升kafka生产者的吞吐量buffer.memorycompression.typebatch.sizelinge

          [转帖]Kafka关键参数设置

          https://www.cnblogs.com/wwcom123/p/11181680.html 生产环境中使用Kafka,参数调优非常重要,而Kafka参数众多,我们的java的Configuration代码中,经常设置的参数如下: Properties props = new Propertie

          [转帖]消息队列与快递柜之间妙不可言的关系

          https://xie.infoq.cn/article/8085241414e8959323ecd7811 一、消息队列是一个快递柜 我们来将快递柜与消息队列做一个对比 消息队列比作快递柜:有很多厂家生产快递柜,如:丰巢(apache kafka),速递易(alibaba RocketMQ),近邻

          [转帖]关于字节序(大小端)的一点想法

          https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

          [转帖]关于统信UOS操作系统版本介绍

          https://blog.csdn.net/qq43748322/article/details/120196200 当下信创产业发展的如火如荼,今天聊聊统信操作系统UOS 相比较于其它国内品牌操作系统,统信UOS的版本、分支比较多,下面为大家详细说说各UOS版本 目前统信UOS系统主要分为桌面版和

          [转帖]关于华为产品生命周期

          关于企业级产品都有EOL里程碑,因些需要考虑对已购产品、业务的生命周期进行升级、迁移、替换等统筹规划。另外如果遇到产品、业务整体出售,还需要评估对现有资产的影响等不可控因素。 今天聊聊华为产品的生命周期,点击查看原文 华为产品生命周期关键里程碑: 华为软件版本生命周期关键里程碑: 点击查询华为产品生

          [转帖]关于SRE方法论的一些笔记

          写在前面 阿里系列有一本《云原生操作系统Kubernetes》中作者在前言里讲到Google开源的Kubernetes和《SRE Google运维解密》这本书是剑法和气功的关系换句话讲Kubernetes是术,SRE Google运维解密是道作为云原生基础设施的Kubernetes小伙伴么应该多少有

          [转帖]关于一致性哈希算法在游戏服务器端的思考

          https://www.jianshu.com/p/b8ae27cf22a9 突然想明白 其实网易的将军令 就是一个一致性哈希的玩法 关于一致性哈希算法在游戏服务器端的思考 需求分析 后端有很多逻辑node节点(not-section binded),节点启动后注册到注册中心 node本身有状态,有

          [转帖]关于ubuntu:如何在-Ubuntu-Server-2204-上设置静态IP地址

          https://lequ7.com/guan-yu-ubuntu-ru-he-zai-ubuntuserver2204-shang-she-zhi-jing-tai-ip-di-zhi.html 在这篇文章中,咱们将介绍如何在 Ubuntu Server 22.04 上设置动态 ip 地址。 强烈建

          [转帖]关于nginx 反向代理upstream中的 keepalive配置

          一、关于nginx upstream 在nginx的模块中,分为3种类型,分别是handler,filter和upstream,其中upstream可以看做一种特殊的handler,它主要用来实现和后端另外的服务器进行通信,由于在nginx中全部都是使用非阻塞,并且是一个流式的处理,所以upstre