1.卡夫卡負載測試
在這個Apache Kafka教程中,我們將了解如何使用Apache JMeter,如何在Apache Kafka上執行Kafka負載測試。此外,這個Kafka負載測試教程教我們如何配置生產者和消費者,這意味着使用JMeter 開發Apache Kafka Consumer和Kafka Producer。最后,我們將看到在Jmeter中構建Kafka負載測試場景。然而,在Kafka負載測試之前,讓我們學習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。
基本上,這個插件有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負載測試:
-
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\n", record.offset(), record.key(), record.value()); }
- 基本上,執行連接配置。
- 此外,還要指定一個主題並對其進行訂閱。
- 此外,消息在本主題的循環中被接收,並且也被帶到控制台。
因此,對於JMeter中的JSR223采樣器,所有這些代碼都將添加一些修改。
5.在JMeter中構建Kafka負載測試場景
在了解了創建負載所需的所有必要元素之后,現在讓我們將幾條消息發布到我們的Kafka服務主題上。因此,假設我們有一個資源,從中收集有關其活動的數據。信息將作為XML文檔發送。
使用命令學習Apache Kafka Operations
- 首先,添加Pepper-Box PlainText配置並創建模板。但是,消息的結構如下:消息號,消息ID,從中收集統計信息的項ID,統計信息,發送日期戳。
- 此外,添加PepperBoxKafkaSampler,並從我們的Kafka服務中指定bootstrap.servers和kafka.topic.name的地址。
- 然后,將帶有使用者代碼的JSR223 Sampler添加到單獨的Thread Group。此外,我們將需要kafka-clients-xxxxjar文件,以便它可以工作。它帶有與Kafka合作的課程。我們可以在我們的Kafka目錄中找到它 - / kafka / lib。
在這里,我們不是在控制台中顯示腳本,而是修改了部分腳本,現在將數據保存到文件中。它實際上是為了更方便地分析結果。此外,我們添加了設置消費者執行時間所必需的部分。
-
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
- 最后,運行腳本並查看結果。
我們可以在打開的文件中看到收到的消息。雖然,我們只需要調整消費者和生產者的數量來增加負荷。
注意:在測試期間不要使用隨機數據作為消息,因為它們的大小可能與當前大小不同,並且這種差異可能會影響測試結果。
所以,這就是如何在Apache Kafka中使用JMeter加載測試。希望您喜歡我們使用JMeter對Kafka負載測試的解釋。
六,結論
因此,我們已經了解了如何使用JMeter對Apache Kafka進行負載測試。此外,在Kafka負載測試中,我們看到使用JMeter配置生產者和消費者以及為Kafka加載測試工具