【kafka】使用jmeter压测kafka并发性能

1、idea中开发kafka并发测试需要的扩展包

由于jmeter的jms模块并不支持kafka,因此需要扩展开发
引入jmeter

        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_core</artifactId>
            <version>5.4.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_java</artifactId>
            <version>5.4.1</version>
            <scope>provided</scope>
        </dependency>

编写向kafka发送消息的核心逻辑,继承AbstractJavaSamplerClient

public class JmeterTest extends AbstractJavaSamplerClient {

    private static final Logger log = LoggerFactory.getLogger(JmeterTest.class);

    private KafkaProducer producer;

    private Integer dataSize;

    private Integer dataNum;

    private String topic;

    // SampleResult类封装了从入口样本返回的各种信息
    private SampleResult results;

    /**
     * 创建生产者实例
    */
    private void init() {
        if (producer == null) {
            // ...
            Map<String, Object> kafkaProperites = ConfigUtil.getProducerParams(openSsl, "jmeter-test");
            producer = new KafkaProducer(kafkaProperites);
        }
    }

    @Override
    public Arguments getDefaultParameters() {
        // 声明定义Arguments类
        Arguments params = new Arguments();
        // 添加一个新参数
        params.addArgument("dataSize", "4608");
        params.addArgument("dataNum", "1");
        params.addArgument("topic", "test_topic_1");
        return params;
    }

    @Override
    public void setupTest(JavaSamplerContext jsc) {
        // 定义SampleResult类
        results = new SampleResult();
        // 以String形式获取指定参数的值,或者如果未指定该值,则返回指定的默认值
        dataSize = jsc.getIntParameter("dataSize", 4608);
        dataNum = jsc.getIntParameter("dataNum", 1);
        topic = jsc.getParameter("topic", "test_topic_1");
    }


    @Override
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        init();
        ProducerRecord<String, byte[]> record = getRecord();
        results.sampleStart();
        for (int i = 0; i < dataNum; i++) {
            producer.send(record);
        }

        results.sampleEnd();
        //由于kafka的错误基本上都是警告,没法通过异常捕获知道,这里直接返回成功了,真正是否成功还得通过日志定位, 待优化
        results.setSuccessful(true);
        results.setResponseData("send " + dataNum + " records to " + topic, StandardCharsets.UTF_8.name());
        producer.close();
        return results;
    }
	// 构造dataSize大小的随机数据
    private ProducerRecord<String, byte[]> getRecord() {
        byte[] payload = null;
        Random random = new Random(0);
        if (dataSize != null) {
            payload = new byte[dataSize];
            for (int i = 0; i < payload.length; ++i)
                payload[i] = (byte) (random.nextInt(26) + 65);
        }

        ProducerRecord<String, byte[]> record = new ProducerRecord<>(topic, payload);
        return record;
    }
}

2、在windows环境中用可视化页面配置

添加线程组,组下面添加取样器-》Java请求
在这里插入图片描述
配置java请求的自定义类路径
在这里插入图片描述
将配置好的线程组保存成jmx文件

3、上传至linux环境中执行

问题:执行jmeter报没有权限
在这里插入图片描述
给整个bin目录赋执行权限即可
在这里插入图片描述
然后执行sh ./jmeter.sh -v,显示jmeter的banner就ok啦
在这里插入图片描述

执行我们配好的jmx文件
sh jmeter.sh -n -t kafka-producer.jmx -l result.jtl
在这里插入图片描述

4、收集结果

回到windows系统,在jmeter中添加一个“聚合报告”,打开result.jtl
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用JMeter进行Kafka压测,您可以按照以下步骤进行操作: 1. 首先,您需要了解什么是KafkaKafka是一个分布式流处理平台,具有高吞吐量、持久性和可扩展性等特点。 2. 接下来,您需要下载Apache JMeter并安装它。您可以从官方网站https://jmeter.apache.org/下载JMeter。 3. 您还需要下载KafkaJMeter插件,该插件可以帮助您在JMeter中进行Kafka压测。您可以从插件作者提供的地址下载插件的jar包,并将其放入JMeter文件夹下的lib/ext目录中。 4. 确保您已经正确安装了JMeterKafka插件之后,您可以打开JMeter并创建一个新的测试计划。 5. 在测试计划中,您需要添加一个Thread Group元素,用于定义并发用户的数量和循环次数。 6. 然后,您需要添加一个Kafka Producer Sampler元素,用于发送消息至Kafka集群。在该元素的配置中,您需要指定Kafka的相关配置参数,如Kafka服务器的地址、主题名称和消息内容等。 7. 接下来,您可以根据需要添加其他的Sampler元素,如Kafka Consumer Sampler用于消费Kafka的消息。 8. 最后,您可以运行测试计划并查看测试结果。JMeter将模拟指定数量的并发用户发送消息至Kafka,并记录相关的性能指标,如吞吐量和响应时间等。 通过以上步骤,您可以使用JMeter进行Kafka压测,并获得相关的性能数据来评估Kafka性能表现。引用<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [如何使用JmeterKafka进行性能测试](https://blog.csdn.net/shan286/article/details/105216381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值