背景:项目需要对接confluent-kafka进行压测,检查consumer的性能。并且confluent-kafka开启了SSL验证,需要账号密码。如果直接使用jmeter的kafka插件是不符合使用要求的,只能重写一个对接confluent-kafka的插件!!!测试场景模拟场景,1个并发,发送100条消息,发送内容相同,先上传结果:1.第一次写的JavaSampler插件结果:平均交易时间600ms左右,TPS为只有1.7/秒。第二次修改后的JavaSamplerPlug-in结果:平均事务7ms左右,TPS可以达到130/s。(如果不限制请求量,TPS可以更高,可以达到1000左右。)从上面的结果可以看出,第一个写的就是垃圾,(ps。因为已经用spring验证过了framework之前,confluent-kafka的性能可以达到每秒1000左右)所以,要排除别人中间件的锅,那就是自己写个垃圾,然后是很长一段时间的调查方式!!!让我们添加代码:publicvoidproduct(Propertiesprops,Stringtopic,Stringkey,Stringvalue)throwsInterruptedException,InstantiationException,IllegalAccessException{//判断主题实例化对象ClassavroType=null;开关(主题){case"staging-shareservice-masterdata-style":avroType=ProductStyle.class;休息;案例“staging-shareservice-masterdata-styleoption”:avroType=ProductStyleOption.class;休息;案例“staging-shareservice-masterdata-sku”:avroType=ProductSku.class;休息;案例“staging-shareservice-masterdata-price”:avroType=Price.class;休息;案例“staging-shareservice-masterdata-location-standard”:avroType=LocationStandard.class;}//序列改变值ObjectavroValue=avroValueSerializer.avroValue(value,avroType);//准备生产者KafkaProducerproducer=newKafkaProducer<>(props);ProducerRecordrecord=newProducerRecord<>(topic,key,avroValue);try{//1.发送消息producer.send(record);}catch(Exceptione){e.printStackTrace();}//生产者.close();}就是上面的发送逻辑,太好了。查看jmeter日志,发现配置信息频繁打印,而且每次打印一次。很明显每次发送都会加载配置信息。配置信息通常在初始化时加载一次,以后可以重复使用,我发现比较好,接下来就是看配置信息加载到哪里了,然后开始低效调优1.先把配置类初始化放到setup里面,结果明显无效;2.将KafkaProducer放入setup中,试一试,发现效果显着;哈哈,问题找到了,效果也很明显,最终代码myKafkaProducermyKafkaProducer=null;属性props=null;//准备生产者KafkaProducerproducer=null;//发送内容对象ProducerRecordrecord=null;//序列化值类型对象avroValue=null;//初始化publicvoidsetupTest(JavaSamplerContextcontext){myKafkaProducer=newmyKafkaProducer();StringparamBroker=context.getParameter("经纪人");StringparamTopic=context.getParameter("主题");StringparamKey=context.getParameter("key");StringparamValue=context.getParameter("value");//初始化配置信息props=myKafkaProducer.initNewConfig(paramBroker);//准备生产者producer=newKafkaProducer<>(props);//判断主题实例化对象ClassavroType=null;switch(paramTopic){案例"staging-shareservice-masterdata-style":avroType=ProductStyle.class;break;case"staging-shareservice-masterdata-styleoption":avroType=ProductStyleOption.class;break;case"staging-shareservice-masterdata-sku":avroType=ProductSku.class;中断;案例“staging-shareservice-masterdata-price”:avroType=Price.class;中断;案例“staging-shareservice-masterdata-location-standard”:avroType=LocationStandard.class;}try{avroValue=avroValueSerializer.avroValue(paramValue,avroType);}catch(InstantiationExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}}@OverridepublicSampleResultrunTest(JavaSamplerContextjavaSamplerContext){SampleResult结果=this.newSampleResult();StringparamTopic=javaSamplerContext.getParameter("topic");StringparamKey=javaSamplerContext.getParameter("key");StringparamValue=javaSamplerContext.getParameter("value");StringBuilderparamStr=newStringBuilder("topic:").append(paramTopic).append(",\nkey:").append(paramKey).append(",\nvalue:").append(paramValue);sampleResultStart(结果,paramStr.toString());record=newProducerRecord<>(paramTopic,paramKey,avroValue);try{//1、发送消息producer.send(record);sampleResultSuccess(result,"异步发送成功");}catch(Exceptionex){sampleResultFailed(result,"500",ex);}返回结果;}