以前分享过一篇线程队列html
#分享一段线程队列--生产者和消费者代码#java
而后一直不知道对性能带来了多大的改善,今天借着对java应用的压测,对这段代码进行一个压力测试,看看实际效果如何spring
环境:springboot+spring-kafkaspringboot
一个测试case是不用线程队列来发送kafka消息,mvc
另外一个是借助线程队列来存放消息,在消费者端再由kafka发送出去app
这里用了两种 a.为线程队列,b为无锁环形队列post
@RestController public class SampleController { @Autowired private Environment env; @Autowired private KafkaDisruptorProducer kafkaDisruptorProducer; @Autowired private KafkaMqProducer kafkaProducer; @Autowired private KafkaTemplate<Integer, String> kafkaTemplate; @RequestMapping("/testProfile") public String testProfile(){ return env.getProperty("profile"); } @RequestMapping("/test4") public String homemvckafak4() { EventMsg eventMessage=new EventMsg(); eventMessage.setEventName("test-method-->"+env.getProperty("profile")+System.currentTimeMillis()); //经过线程生产者-消费者模型来发送消息 kafkaProducer.write(eventMessage); return "kafka3==>Hello World! file.upload.stor-path"; } @RequestMapping("/test3") public String homemvckafak() { EventMsg eventMessage=new EventMsg(); eventMessage.setEventName("test-method-->"+env.getProperty("profile")+System.currentTimeMillis()); //直接走kafka发送消息 kafkaTemplate.sendDefault(JSON.toJSONString(eventMessage)); return "kafka3==>Hello World! file.upload.stor-path"; } @RequestMapping("/test") public String home() { EventMsg eventMessage=new EventMsg(); eventMessage.setEventName("test-method-->"+env.getProperty("profile")+System.currentTimeMillis()); //经过高性能无锁队列来发送消息 kafkaDisruptorProducer.write(eventMessage); return "kafka==>Hello World! file.upload.stor-path"; } @RequestMapping("/test2") public String homemvc() { //直接返回,实测性能做为参照指标 return "kafka2==>Hello World! file.upload.stor-path"; } }
打开jmeter 配置好压测参数,性能
实测test3,为直接经过kafka发送消息测试
2.压test4,为线程队列发送消息url
能够看出使用线程队列比不使用性能高出1000+ tps
以上为单机测试,电脑东西开的多,会有必定的影响,不过要正常测试的话,在6k左右是正常
附kafka监控,直接使用kafka发送消息,那么这里显示的message速度会在1-2K之间,若是是线程队列,那么在0.5-0.7之间,这里写入队列和取出队列会有相应的损耗所致