zoukankan      html  css  js  c++  java
  • 使用JMeter进行Apache Kafka负载测试

    1.卡夫卡负载测试

    在这个Apache Kafka教程中,我们将了解如何使用Apache JMeter,如何在Apache Kafka上执行Kafka负载测试。此外,这个Kafka负载测试教程教我们如何配置生产者和消费者,这意味着使用JMeter 开发Apache Kafka Consumer和Kafka Producer。最后,我们将看到在Jmeter中构建Kafka负载测试场景。然而,在Kafka负载测试之前,让我们学习Kafka的简要介绍,以便更好地理解其他工作。

    Apache Kafka-Load测试

    使用JMeter进行Apache Kafka负载测试

    2.什么是Apache Kafka?

    简而言之,Apache Kafka是分布式数据库和消息队列的混合体。为了处理数TB的信息,许多大公司都在使用它。此外,由于其功能,卡夫卡广受欢迎。例如,像LinkedIn这样的公司使用它来传输有关用户活动的数据,而像Netflix这样的公司则使用它来为下游系统(如Elasticsearch,Amazon EMR,Mantis等)进行数据收集和缓冲。
    此外,让我们了解Kafka的一些对Kafka负载测试很重要的功能:

    让我们来测试你对卡夫卡的了解程度

    • 默认情况下,长消息存储时间 - 一周。
    • 由于顺序I / O,性能高。
    • 此外,方便的群集。
    • 要在群集中复制和分发队列,由于该功能,数据具有高可用性。
    • 除了数据传输,它还可以使用Streaming API进行处理。

    我们知道,为了处理大量数据,我们使用Kafka。因此,在使用JMeter进行Kafka负载测试时,请注意以下几个方面:

    • 如果我们不断地将数据写入磁盘,那将影响服务器的容量。因为,如果不足,它将达到拒绝服务状态。
    • 但是,部门的分布和经纪人的数量也会影响服务能力的使用。
    • 但是,当我们使用复制功能时,一切都变得更加复杂。其背后的原因是,它的维护需要更多的资源,而经纪人拒绝接收消息的情况变得更加可能。

    请点击链接以了解有关Kafka的更多信息 
    尽管如此,即使大多数流程都是自动化的,但数据处理时数据可能会丢失。因此,我们可以说对这些服务的测试非常重要,并且能够生成适当的负载也是必不可少的。
    确保,Apache Kafka负载测试将安装在Ubuntu上,以便进行演示。此外,我们将使用Pepper-Box插件作为制作人,因为它比kafkameter 更方便地使用消息生成但是,没有插件提供消费者实现,因此我们必须自己实现消费者。而且,我们将使用JSR223采样器做到这一点。现在,让我们转向Kafka负载测试。
    探索Apache Kafka用例| 卡夫卡应用程序

    3.配置制作人 - Pepper-Box

    现在,为了安装插件,我们需要编译这个源代码下载 jar文件此外,我们需要将它放在lib / ext文件夹中并重新启动JMeter

    Kafka负载测试:配置Producer

    Kafka负载测试:配置Producer

    基本上,这个插件有3个元素:

    • Pepper-Box PlainText配置

    它允许根据指定的模板构建文本消息。

    • Pepper-Box序列化配置

    此配置允许构建作为序列化java对象的消息。

    • PepperBoxKafkaSampler

    它旨在发送由先前元素构建的消息。
    了解有关Kafka Producer的更多信息,请点击此链接
    让我们详细了解Kafka负载测试的所有这些配置:

    一个。Pepper-Box PlainText配置

    请按照下列步骤来添加这个项目,首先要到线程组- >添加- >配置元件- >胡椒盒纯文本配置
    卡夫卡负载测试胡椒盒纯文本Config元素有2个字段:

    一世。消息占位符密钥

    虽然我们想要使用此元素中的模板,但它是需要在PepperBoxKafkaSampler中指定的键。

    II。架构模板

    这是我们可以使用JMeter变量和函数的消息模板,也可以是插件函数。但是,此消息结构可以是任何内容,从纯文本到JSON或XML。

    湾 Pepper-Box序列化配置

    现在,按照几个步骤添加此元素,首先转到线程组 - >添加 - >配置元素 - > Pepper-Box序列化配置
    但是,此元素有一个键的字段和类名字段,用于指定在Java类确保带有类jar文件必须放在lib / ext文件夹中。因此,具有其属性的字段将在指定之后显示在下面,并且还可以现在为它们分配所需的值。虽然,我们在这里再次重复了最后一个元素的消息,但这次它将是一个Java对象

    C。 PepperBoxKafkaSampler

    此外,要添加此元素,请按照下列步骤操作。首先转到Thread组 - > Add - > Sampler - > Java Request然后,从下拉列表中选择com.gslab.pepper.sampler.PepperBoxKafkaSampler
    基本上,此元素有以下设置:

    • bootstrap.servers / zookeeper.servers

    经纪人/动物园管理员的地址,格式为broker-ip-1:port,broker-ip-2:port等。

    • kafka.topic.name

    它是消息发布主题的名称。
    Apache Kafka架构及其基本概念

    • key.serializer

    但是,它是一个用于密钥序列化的类。如果消息中没有密钥,请保持不变。

    • value.serializes

    它是消息序列化的类。对于简单的文本,该字段保持不变。我们需要在使用Pepper-Box Serialized Config时指定“com.gslab.pepper.input.serialized.ObjectSerializer”。

    • compression.type

    基本上,它是一种消息压缩(无/ gzip / snappy / lz4)

    • batch.size

    这是最大的邮件大小。

    • linger.ms

    这被视为消息等待时间。

    • buffer.memory

    它是生产者的缓冲区大小。

    • 的ack

    这是服务质量(-1/0/1 - 无法保证交付/肯定会传递消息/消息将被传送一次)。

    • receive.buffer.bytes / send.buffer.bytes

    它是TCP发送/接收缓冲区的大小。-1 - 使用默认OS值。

    • security.protocol

    这是加密协议(PLAINTEXT / SSL / SASL_PLAINTEXT / SASL_SSL)。

    • message.placeholder.key

    它是消息键,在前面的元素中指定。

    • kerberos.auth.enabled,java.security.auth.login.config,java.security.krb5.conf,sasl.kerberos.service.name

    这些都是负责身份验证的字段组。
    通常,如有必要,我们可以在名称前使用前缀_添加其他参数。
    例如,
    _ssl.key.password。
    看看卡夫卡的优缺点

    4.配置消费者

    由于我们有一个在服务器上创建最大负载的生产者,因此该服务也必须传递消息。因此,为了更准确地再现这些情况,我们还应该增加消费者。此外,我们还可以使用它来检查是否已传递所有消费者消息。
    例如,
    让我们采用以下源代码并简要介绍其步骤,以便更好地理解Kafka负载测试:

    1. Properties props = new Properties();
           props.put("bootstrap.servers", "localhost:9092");
           props.put("group.id", group);
           props.put("enable.auto.commit", "true");
           props.put("auto.commit.interval.ms", "1000");
           props.put("session.timeout.ms", "30000");
           props.put("key.deserializer",
              "org.apache.kafka.common.serializa-tion.StringDeserializer");
           props.put("value.deserializer",
              "org.apache.kafka.common.serializa-tion.StringDeserializer");
           KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);
           consumer.subscribe(Arrays.asList(topic));
           System.out.println("Subscribed to topic " + topic);
           int i = 0;
           while (true) {
              ConsumerRecords<String, String> records = con-sumer.poll(100);
                 for (ConsumerRecord<String, String> record : records)
                    System.out.printf("offset = %d, key = %s, value = %s
      ",
                    record.offset(), record.key(), record.value());
           }
    1. 基本上,执行连接配置。
    2. 此外,还要指定一个主题并对其进行订阅。
    3. 此外,消息在本主题的循环中被接收,并且也被带到控制台。

    因此,对于JMeter中的JSR223采样器,所有这些代码都将添加一些修改。

    5.在JMeter中构建Kafka负载测试场景

    在了解了创建负载所需的所有必要元素之后,现在让我们将几条消息发布到我们的Kafka服务主题上。因此,假设我们有一个资源,从中收集有关其活动的数据。信息将作为XML文档发送。
    使用命令学习Apache Kafka Operations

    1. 首先,添加Pepper-Box PlainText配置并创建模板。但是,消息的结构如下:消息号,消息ID,从中收集统计信息的项ID,统计信息,发送日期戳。
    2. 此外,添加PepperBoxKafkaSampler,并从我们的Kafka服务中指定bootstrap.servers和kafka.topic.name的地址。
    3. 然后,将带有使用者代码的JSR223 Sampler添加到单独的Thread Group。此外,我们将需要kafka-clients-xxxxjar文件,以便它可以工作。它带有与Kafka合作的课程。我们可以在我们的Kafka目录中找到它 - / kafka / lib。

    在这里,我们不是在控制台中显示脚本,而是修改了部分脚本,现在将数据保存到文件中。它实际上是为了更方便地分析结果。此外,我们添加了设置消费者执行时间所必需的部分。 

    1. Updated part:
       long t = System.currentTimeMillis();
       long end = t + 5000;
       f = new FileOutputStream(".\data.csv", true);
       p = new PrintStream(f);
       while (System.currentTimeMillis()<end)
       {
           ConsumerRecords<String, String> records = consumer.poll(100);
           for (ConsumerRecord<String, String> record : records)
          {
              p.println( "offset = " + record.offset() +" value = " + record.value());
          }
          consumer.commitSync();
        }
        consumer.close();
        p.close();
        f.close();

    结果,脚本的结构如下所示。这里,两个线程同时工作。Kafka Producers开始向指定主题发布消息,Kafka消费者连接到主题并等待来自Kafka的消息。此外,它在消费者收到消息时将消息写入文件。
    让我们学习Apache Kafka Workflow | Kafka Pub-Sub Messaging

    1. 最后,运行脚本并查看结果。

    我们可以在打开的文件中看到收到的消息。虽然,我们只需要调整消费者和生产者的数量来增加负荷。
    注意:在测试期间不要使用随机数据作为消息,因为它们的大小可能与当前大小不同,并且这种差异可能会影响测试结果。
    所以,这就是如何在Apache Kafka中使用JMeter加载测试。希望您喜欢我们使用JMeter对Kafka负载测试的解释。

    六,结论

    因此,我们已经了解了如何使用JMeter对Apache Kafka进行负载测试。此外,在Kafka负载测试中,我们看到使用JMeter配置生产者和消费者以及为Kafka加载测试工具

  • 相关阅读:
    The Mac Application Environment 不及格的程序员
    Xcode Plugin: Change Code In Running App Without Restart 不及格的程序员
    The property delegate of CALayer cause Crash. 不及格的程序员
    nil localizedTitle in SKProduct 不及格的程序员
    InApp Purchase 不及格的程序员
    Safari Web Content Guide 不及格的程序员
    在Mac OS X Lion 安装 XCode 3.2 不及格的程序员
    illustrate ARC with graphs 不及格的程序员
    Viewing iPhoneOptimized PNGs 不及格的程序员
    What is the dSYM? 不及格的程序员
  • 原文地址:https://www.cnblogs.com/a00ium/p/10852976.html
Copyright © 2011-2022 走看看