大尺寸 JSON 的 Pepper-box 纯文本配置中的异常



我正在尝试通过 Pepper-Box 纯文本配置发送大尺寸的 Jsons 并得到异常:

java.lang.ClassFormatError: Truncated class file
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_172]
at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:1.8.0_172]
at java.lang.ClassLoader.defineClass(ClassLoader.java:642) ~[?:1.8.0_172]
at com.gslab.pepper.input.compile.DynamicClassLoader.findClass(DynamicClassLoader.java:59) ~[pepper-box-1.0.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_172]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_172]
at com.gslab.pepper.input.compile.InMemoryJavaCompiler.compileSchemaClass(InMemoryJavaCompiler.java:46) ~[pepper-box-1.0.jar:?]
at com.gslab.pepper.input.SchemaTranslator.getPlainTextMsgIterator(SchemaTranslator.java:47) ~[pepper-box-1.0.jar:?]
at com.gslab.pepper.input.SchemaProcessor.getPlainTextMessageIterator(SchemaProcessor.java:36) ~[pepper-box-1.0.jar:?]
at com.gslab.pepper.loadgen.impl.PlaintTextLoadGenerator.<init>(PlaintTextLoadGenerator.java:34) ~[pepper-box-1.0.jar:?]
at com.gslab.pepper.config.plaintext.PlainTextConfigElement.iterationStart(PlainTextConfigElement.java:53) ~[pepper-box-1.0.jar:?]
at org.apache.jmeter.control.GenericController.fireIterationStart(GenericController.java:399) ~[ApacheJMeter_core.jar:5.2.1]
at org.apache.jmeter.control.GenericController.fireIterEvents(GenericController.java:391) ~[ApacheJMeter_core.jar:5.2.1]
at org.apache.jmeter.control.GenericController.next(GenericController.java:160) ~[ApacheJMeter_core.jar:5.2.1]
at org.apache.jmeter.control.LoopController.next(LoopController.java:135) ~[ApacheJMeter_core.jar:5.2.1]
at org.apache.jmeter.threads.AbstractThreadGroup.next(AbstractThreadGroup.java:92) ~[ApacheJMeter_core.jar:5.2.1]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:255) ~[ApacheJMeter_core.jar:5.2.1]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_172]
  1. 如果使用较小的 JSON 重现该问题 - 可能是 JSON 语法与架构模板函数冲突
  2. 如果问题在使用大型 JSON 中重现 - 您可以在 Pepper-Box - Kafka 负载生成器项目中提出问题。同时,您可以使用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);
    int partition = 5;
    1.upto(100, { counter ->
    producer.send(new ProducerRecord<>("your-topic", partition, "foo-" + counter, new File('/path/to/your/big.json').text);
    })
    producer.close();
    

更多信息:

  • 使用 Java 的 Kafka 生产者和消费者示例
  • Apache Groovy - 为什么以及如何使用它

最新更新