首页 > 解决方案 > Jmeter kafka生产者负载测试发送字符串分隔的Json

问题描述

我正在尝试发送带有字符串分隔的json,例如


"carrierId":"XXX",
"eventProcessedTS":1618261255871,
"eventTS":1618261255871,
"deviceId":"XXX",
"event":  "{\"deviceDetailsDataModel\":{\"eventDateTime\":1618261255871,\"vin\":\"XXXX\",\"deviceTimeZone\":\"XXXX\",\"deviceId\":\"XXXXX\"}}"
}

但是当我查看 kafka 消费者时,我收到的消息是

"carrierId":"XXX",
"eventProcessedTS":1618261255871,
"eventTS":1618261255871,
"deviceId":"XXX",
"event":  "{"deviceDetailsDataModel":{"eventDateTime":1618261255871,"vin":"XXXX","deviceTimeZone":"XXXX","deviceId":"XXXXX"}}"
}```

without string delimited.
I have created this as JsonObject and convert event object alone to string using  event.toString() in my JSR223sampler but Still, it's not working. is it a limitation?  I am using kafkaclient 2.7.0

标签: jmeter

解决方案


目前尚不清楚您使用的是哪个“Jmeter kafka 生产者”,开箱即用的 JMeter 不提供任何 Kafka 负载测试功能,如果您使用像Pepper-Box - Kafka Load Generatorkafkameter这样的插件,您应该联系给有这个问题的 JMeter 插件开发人员和/或维护人员。

另请注意,您始终可以使用JSR223 Sampler 和 Groovy 代码实现 Kafka 生产者,示例代码类似于:

import org.apache.kafka.clients.producer.KafkaProducer
import org.apache.kafka.clients.producer.ProducerRecord

def props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("batch.size", 16384);
props.put("linger.ms", 1);
props.put("buffer.memory", 33554432);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

def producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("your-topic", "your_JSON_here");

producer.close();

这样,您将确信 JMeter 会“按原样”发送您的 JSON,而无需插件引入任何最终转换

更多信息:Apache Kafka - 如何使用 JMeter 进行负载测试


推荐阅读