CN117609043A - kafka消费者客户端的性能测试方法及装置 - Google Patents
kafka消费者客户端的性能测试方法及装置 Download PDFInfo
- Publication number
- CN117609043A CN117609043A CN202311622653.9A CN202311622653A CN117609043A CN 117609043 A CN117609043 A CN 117609043A CN 202311622653 A CN202311622653 A CN 202311622653A CN 117609043 A CN117609043 A CN 117609043A
- Authority
- CN
- China
- Prior art keywords
- kafka
- sampler
- test
- client
- producer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 238000011056 performance test Methods 0.000 title claims abstract description 40
- 238000012360 testing method Methods 0.000 claims abstract description 156
- 230000006870 function Effects 0.000 claims description 31
- 230000005540 biological transmission Effects 0.000 claims description 17
- 230000008569 process Effects 0.000 claims description 14
- 238000005192 partition Methods 0.000 claims description 9
- 238000004891 communication Methods 0.000 claims description 3
- 230000000007 visual effect Effects 0.000 description 10
- 230000003068 static effect Effects 0.000 description 9
- 238000013461 design Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000003993 interaction Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 239000011800 void material Substances 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种kafka消费者客户端的性能测试方法及装置,方法包括:利用kafka取样器插件所呈现的操作界面,获得被输入的多项测试参数;kafka取样器插件被添加在基于JMeter构建的线程组中,线程组包括多个目标线程;根据kafka取样器插件中的执行程序和测试参数,构建基于JMeter的测试脚本;执行基于JMeter的测试脚本,以使得每个目标线程分别至少通过执行程序控制kafka生产者客户端按照测试参数向相应的kafka代理服务器发送消息;在目标线程的执行过程中,获得kafka消费者客户端的至少一项性能指标数据;根据性能指标数据,获得kafka消费者客户端对应的性能测试结果。
Description
技术领域
本申请涉及测试技术领域,尤其涉及一种kafka消费者客户端的性能测试方法及装置。
背景技术
Kafka是一个分布式消息系统,主要用来构建实时的数据管道和流式应用程序,它因具备分布式水平扩展、高可用、高吞吐率等特性而被广泛使用。例如,在银行信息化项目中使用kafka实现相应的功能,也因此在银行信息化项目中需要对Kafka消费者客户端的性能测试。
目前,多通过手工编写Kafka生产者发压测试程序,用于向Kafka的代理服务器发压,基于此通过监控Kafka消费者客户端读取并处理消息的时长、TPS、吞吐量等性能指标,以实现kafka消费者客户端的性能测试。
但是,这种性能测试方法要求测试人员具备一定的编码技能,针对每次测试都要进行编码,因此,性能测试的操作复杂度较高,测试效率较低。
发明内容
有鉴于此,本申请提供一种kafka消费者客户端的性能测试方法、装置及电子设备,用以解决现有技术中对kafka消费者客户端进行性能测试的测试效率较低的技术问题,如下:
一种kafka消费者客户端的性能测试方法,所述方法包括:
利用kafka取样器插件所呈现的操作界面,获得被输入的多项测试参数;所述kafka取样器插件被添加在基于JMeter构建的线程组中,且,所述线程组包括多个目标线程;
根据所述kafka取样器插件中的执行程序和所述测试参数,构建基于JMeter的测试脚本;
执行所述基于JMeter的测试脚本,以使得每个所述目标线程分别至少通过所述执行程序控制kafka生产者客户端按照所述测试参数向相应的kafka代理服务器发送消息;
在所述目标线程的执行过程中,获得所述kafka消费者客户端的至少一项性能指标数据;
根据所述性能指标数据,获得所述kafka消费者客户端对应的性能测试结果。
上述方法,优选的,所述kafka取样器插件包括:
第一实现类,所述第一实现类继承JMeter的AbstractSamplerGui抽象类,所述第一实现类用于实现所述操作界面;
第二实现类,所述第二实现类继承JMeter的AbstractSampler抽象类,所述第二实现类用于实现所述执行程序。
上述方法,优选的,所述第一实现类中至少包括:
定义函数,用于初始化所述操作界面;
测试要素创建函数,用于创建取样器实例;
修改测试要素函数,用于将被输入到所述操作界面上的多项测试参数添加到所述取样器实例中。
上述方法,优选的,所述第一实现类中还包括:
配置函数,用于从输入的取样器实例中获取多项测试参数,将所述测试参数更新到所述操作界面;
重置函数,用于初始化所述操作界面中的界面元素的元素内容。
上述方法,优选的,所述第二实现类至少用于创建取样器结果对象,所述取样器结果对象中至少配置有kafka生产者对象;
其中,所述kafka生产者对象用于触发所述kafka生产者客户端按照所述取样器实例提供的所述测试参数向对应的kafka代理服务器发送消息。
上述方法,优选的,所述第二实现类还用于:
声明多个全局共享参数,所述全局共享参数用于存储所述取样器实施例提供的所述测试参数;
其中,所述测试参数包括:
kafka集群的地址、kafka主题、kafka生产者客户端的消息值序列化类名、kafka生产者客户端的消息键序列化类名、kafka生产者客户端消息发送的请求确认数量、kafka生产者客户端消息发送的重试次数、kafka生产者客户端消息发送到的Kafka分区、kafka生产者客户端发送的消息健、kafka生产者客户端发送的目标消息。
上述方法,优选的,所述取样器结果对象中还配置有:
结果抓取函数,用于记录所述取样器实例的执行过程中的过程信息;
其中,所述取样器实例的执行过程包括:
所述取样器实例向所述kafka生产者客户端提供所述测试参数。
一种kafka消费者客户端的性能测试装置,所述装置包括:
JMeter,所述JMeter中构建有线程组,且,所述线程组包括多个目标线程;
kafka取样器插件,所述kafka取样器插件被添加在所述线程组中,所述kafka取样器插件中包括执行程序,且,所述kafka取样器插件能够呈现操作界面,所述操作界面用于获得被输入的多项测试参数,以使得所述JMeter根据所述执行程序和所述测试参数,构建基于JMeter的测试脚本并执行所述基于JMeter的测试脚本,以使得每个所述目标线程分别至少通过所述执行程序控制kafka生产者客户端按照所述测试参数向相应的kafka代理服务器发送消息;
测试组件,用于在所述目标线程的执行过程中,获得所述kafka消费者客户端在所述的至少一项性能指标数据;根据所述性能指标数据,获得所述kafka消费者客户端对应的性能测试结果。
一种电子设备,包括至少一个处理器、以及与处理器连接的至少一个存储器、总线;其中,所述处理器、所述存储器通过所述总线完成相互间的通信;所述处理器用于调用所述存储器中的程序指令,以执行如前文中任一项所述的kafka消费者客户端的性能测试方法。
一种存储介质,所述存储介质包括存储的程序,其中,所述程序执行如前文中任意一项权利要求所述的kafka消费者客户端的性能测试方法。
由上述方案可知,本申请提供的一种kafka消费者客户端的性能测试方法、装置及电子设备中,通过JMeter添加编写好的Kafka取样器插件即可实现可视化的操作界面,提供给用户输入测试参数,然后在据此构建基于JMeter的测试脚本后,执行该脚本,这样通过Kafka取样器插件中的执行程序控制kafka生产者客户端向kafka代理服务器发送消息,进而获得到kafka消费者客户端的性能指标数据,以获得性能测试结果。可见,本申请中在JMeter上添加Kafka插件能够实现对kafka消费者客户端的可视化性能测试,kafka取样器插件只需要编写一次添加到基于JMeter构建的线程组中,就可以在用户输入测试参数后通过构建测试脚本实现对kafka消费者客户端的性能测试,无需每次都编写Kafka生产者发压测试程序,从而能够降低性能测试的操作复杂度,进而提高测试效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例一提供的一种kafka消费者客户端的性能测试方法的流程图;
图2为kafka系统的架构图;
图3为本申请实施例中在JMeter中添加kafka取样器插件的示例图;
图4为本申请实施例中kafka取样器插件所呈现的操作界面的示例图;
图5为本申请实施例二提供的一种kafka消费者客户端的性能测试装置的结构示意图;
图6为本申请实施例三提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参考图1所示,为本申请实施例一提供的一种kafka消费者客户端的性能测试方法的实现流程图,本实施例中的方法可以适用于kafka的分布式消息系统中,如图2中所示,kafka系统包括以下结构:
kafka集群,其包含若干Kafka broker1-N,即kafka代理服务器;
若干Kafka Producer即kafka生产者客户端;
若干Kafka Consumer即kafka消费者客户端;
Zookeeper集群。
需要说明的是,Kafka Broker也称为Kafka节点服务器,负责消息的存储和管理。Kafka Producer负责消息的生成和推送,使用Push模式发布消息到Kafka主题中。KafkaConsumer负责消息的获取和处理,使用Pull模式从Kafka订阅并消费消息。Kafka Topic即Kafka主题,每条发布到Kafka集群的消息都有一个类别,这个类别被称为主题。Kafka主题在逻辑上可以被认为是一个队列,每条消息都必须指定一个主题,每个主题的消息都可以由一个或多个Kafka消费者消费。而Kafka Partition即Kafka分区,每个Kafka主题被划分为一个或多个分区。Kafka生产者客户端发布的消息,可以分布到不同的分区。
其中,本实施例中的技术方案主要用于对kafka消费者客户端进行性能测试,以提高测试效率。
具体的,本实施例中的方法可以包括以下步骤:
步骤101:利用kafka取样器插件所呈现的操作界面,获得被输入的多项测试参数。
其中,kafka取样器插件被添加在基于JMeter构建的线程组中,且,线程组包括多个目标线程。
例如,在启动JMeter之后,用户可以在JMeter上创建一个包含多个目标线程的线程组,如图3中所示,再在线程组上添加编写好的kafka取样器插件,之后,用户可以kafka取样器插件所呈现的操作界面上进行参数输入,基于此,本实施例中可以利用操作界面接收用户的参数输入操作,进而提取到参数输入操作中的多项测试参数。
需要说明的是,编写完成的kafka取样器插件可以编译打包为jar包,将jar包放到JMeter根目录的lib\ext目录下,JMeter启动后会将其加载到内存,让用户通过菜单添加到JMeter中。
具体实现中,操作界面中包含多个界面元素,如图4中所示,操作界面中至少有测试参数对应的界面元素,用户可以按照界面元素对应的输入框进行参数输入。
需要说明的是,测试参数中可以包括以下多项:
kafka集群的地址、kafka主题、kafka生产者客户端的消息值序列化类名、kafka生产者客户端的消息键序列化类名、kafka生产者客户端消息发送的请求确认数量、kafka生产者客户端消息发送的重试次数、kafka生产者客户端消息发送到的Kafka分区、kafka生产者客户端发送的消息健、kafka生产者客户端发送的目标消息。
步骤102:根据kafka取样器插件中的执行程序和测试参数,构建基于JMeter的测试脚本。
其中,kafka取样器插件中的执行程序能够触发kafka生产者客户端向kafka代理服务器发送消息。
具体的,本实施例中在JMeter上,可以通过脚本构建组件,使用kafka取样器插件中的执行程序和测试参数构建出基于JMeter的测试脚本。
步骤103:执行基于JMeter的测试脚本,以使得每个目标线程分别至少通过执行程序控制kafka生产者客户端按照测试参数向相应的kafka代理服务器发送消息。
其中,本实施例中通过多个目标程序高并发控制kafka生产者客户端向kafka代理服务器发送消息,以提高消息发送的效率。
步骤104:在目标线程的执行过程中,获得kafka消费者客户端的至少一项性能指标数据。
其中,性能指标数据可以包括以下至少一项:系统响应时长的指标数据、每秒事务处理量TPS(Transaction Per Second)的指标数据、吞吐量的指标数据、资源利用率的指标数据。
具体的,本实施例中可以使用监控工具记录这些性能指标数据,或者,本实施例中可以通过系统日志记录这些性能指标数据。
步骤105:根据性能指标数据,获得kafka消费者客户端对应的性能测试结果。
具体的,本实施例中可以对性能指标数据进行阈值或条件判断,以验证kafka消费者客户端的性能是否满足预期需求,以得到性能测试结果。
由上述方案可知,本申请实施例一提供的一种kafka消费者客户端的性能测试方法中,通过JMeter添加编写好的Kafka取样器插件即可实现可视化的操作界面,提供给用户输入测试参数,然后在据此构建基于JMeter的测试脚本后,执行该脚本,这样通过Kafka取样器插件中的执行程序控制kafka生产者客户端向kafka代理服务器发送消息,进而获得到kafka消费者客户端的性能指标数据,以获得性能测试结果。可见,本实施例中在JMeter上添加Kafka插件能够实现对kafka消费者客户端的可视化性能测试,kafka取样器插件只需要编写一次添加到基于JMeter构建的线程组中,就可以在用户输入测试参数后通过构建测试脚本实现对kafka消费者客户端的性能测试,无需每次都编写Kafka生产者发压测试程序,从而能够降低性能测试的操作复杂度,进而提高测试效率。
进一步的,本实施例中通过在线程组中配置多个目标线程,实现高并发的消息发送,能够进一步提高测试效率,也能够提高测试准确性。
另外,本实施例中用户可以通过操作界面根据实际需要进行测试参数的配置,由此提高性能测试的灵活性,进而能够改善测试体验。
在一种实现方式中,kafka取样器插件包括以下实现类:
第一实现类,所述第一实现类继承JMeter的AbstractSamplerGui抽象类,所述第一实现类用于实现所述操作界面。其中,AbstractSamplerGui抽象类继承自AbstractJMeterGuiComponent,负责界面呈现和向取样器实例赋值。
第二实现类,所述第二实现类继承JMeter的AbstractSampler抽象类,所述第二实现类用于实现所述执行程序。其中,AbstractSampler抽象类继承自AbstractTestElement抽象类,主要负责与界面之间进行数据传递、实现取样器实例的业务逻辑以及对JMeter引擎的调用。
其中,第一实现类中至少包括:
定义函数,用于初始化所述操作界面。例如,定义函数可以为init方法,主要用于对界面和布局进行初始化,如自定义Kafka取样器插件所呈现的操作界面的布局和组件内容。Init方法如下:
private void init(){//初始化Kafka取样器的UI布局
setLayout(new BorderLayout(0,5));setLayout(new BorderLayout(0,5));
setBorder(makeBorder());
add(makeTitlePanel(),BorderLayout.NORTH);
add(addHelpLinkToPanel(this.makeTitlePanel()),BorderLayout.NORTH);
defaultPanel=new KafkaConfigGui(false);
add(defaultPanel,BorderLayout.CENTER);}
测试要素创建函数,用于创建取样器实例。例如,测试要素创建函数可以为createTestElement方法。主要用于生成一个新的Sampler对象即取样器实例,Sampler对象用于随后的业务处理使用。createTestElement方法如下:
public TestElement createTestElement(){//创建一个新Sampler,然后将界面中的输入数据传至Sampler实例中
KafkaSampler sampler=new KafkaSampler();
modifyTestElement(sampler);
return sampler;}
修改测试要素函数,用于将被输入到所述操作界面上的多项测试参数添加到所述取样器实例中。例如,修改测试要素函数可以为modifyTestElement方法,该方法在被调用时,将用户在Kafka取样器插件所呈现的操作界面中的输入数据即测试参数传入业务处理需要使用的Sampler对象中。modifyTestElement方法如下:
public void modifyTestElement(TestElement sampler){//将界面数据传到Sampler中
sampler.clear();
sampler.addTestElement(defaultPanel.createTestElement());
super.configureTestElement(sampler);}
进一步的,第一实现类中还可以包括:
配置函数,用于从输入的取样器实例中获取多项测试参数,将所述测试参数更新到所述操作界面。例如,配置函数可以为configure方法。主要用于更新Kafka取样器插件所呈现的操作界面中的界面元素中的数据,从输入的Sampler对象中获取目前元素的最新内容,更新到Kafka取样器插件所呈现的操作界面中。configure方法如下:
public void configure(TestElement element){//把Sampler中的数据加载到界面中
super.configure(element);
defaultPanel.configure(element);}
重置函数,用于初始化所述操作界面中的界面元素的元素内容。例如,重置函数可以为clearGui方法。主要用于用户清除Kafka取样器插件所呈现的操作界面中的界面元素的元素内容时,设置其界面元素的缺省值即默认值。
public void clearGui(){//重置界面元素为缺省值
super.clearGui();
defaultPanel.clearGui();}
基于以上实现,第二实现类至少用于创建取样器结果对象,取样器结果对象中至少配置有kafka生产者对象。
其中,kafka生产者对象用于触发kafka生产者客户端按照取样器实例提供的测试参数向对应的kafka代理服务器发送消息。
具体的,kafka生产者对象触发kafka生产者客户端与取样器实例之间进行交互,由取样器实例为kafka生产者客户端提供测试参数,基于此,被触发的kafka生产者客户端按照取样器实例提供的测试参数向测试参数表征的kafka代理服务器发送测试参数中的目标消息。
例如,取样器结果对象可以为SampleResult对象,kafka生产者对象可以为KafkaProducer对象,该SampleResult对象中至少包含有KafkaProducer对象,这样,通过KafkaProducer对象触发Kafka Producer按照Sampler对象提供的测试参数向对应IP地址的kafka Broker发送目标消息。
进一步的,第二实现类还用于声明多个全局共享参数,全局共享参数用于存储取样器实施例提供的测试参数。
例如,全局共享参数主要用于存放Kafka取样器插件所呈现的操作界面传来的测试参数,其中包含目标消息,并在实现中加入getter和setter方法。全局共享参数如下:
public static final String KAFKA_BROKERS="bootstrap.servers";//Kafka集群IP地址
public static final String KAFKA_TOPIC="producer.topic";//生产者客户端消息发送到的Kafka主题
public static final String KAFKA_MESSAGE_SERIALIZER="producer.value.serializer";//生产者客户端消息值序列化类名
public static final String KAFKA_KEY_SERIALIZER="producer.key.serializer";//生产者客户端消息键序列化类名
public static final String KAFKA_ACKS="producer.acks";//生产者客户端消息发送的请求确认数量
public static final String KAFKA_RETRIES="producer.retries";//生产者客户端消息发送的重试次数
public static final String KAFKA_PARTITION="partition";//生产者客户端消息发送到的Kafka分区
public static final String KAFKA_KEY="key";//生产者客户端发送的消息健
public static final String KAFKA_MESSAGE="producer.message";//生产者客户端发送的消息
另外,取样器结果对象中还可以配置有:结果抓取函数,用于记录所述取样器实例的执行过程中的过程信息,如表示设置取样器实例的请求数据、表征取样器实例交互结束的信息、表示设置取样器的交互是否成功的信息。
其中,取样器实例的执行过程包括:
取样器实例向kafka生产者客户端提供测试参数。
例如,第二实现类中的sample方法主要代码段主要用于Kafka生产者消息发送的逻辑处理。其首先新建一个SampleResult对象,用于记录取样器的执行过程。sampleStart表示取样器交互开始,KafkaProducer对象用于Kafka生产者发送信息,setSamplerData表示设置取样器的请求数据,sampleEnd表示取样器交互结束,setSuccessful表示设置取样器的交互是否成功。sample方法的部分代码段如下:
public SampleResult sample(Entry entry){//实现Kafka生产者消息发送的逻辑处理,调起发压执行的入口
SampleResult result=new SampleResult();
try{
result.sampleStart();
KafkaProducer<String,String>kafkaproducer=getProducer();
ProducerRecord<String,String>msg=new ProducerRecord<String,String>(getTopic(),getPartition(),getKey(),getMessage());
kafkaproducer.send(msg);
result.setSamplerData(...);
result.sampleEnd();
result.setSuccessful(true);
result.setResponseCodeOK();
result.setResponseData("Send OK","GBK");
}catch(Exception ex){
result.setSamplerData(...);
result.sampleEnd();
result.setSuccessful(false);
result.setResponseMessage("Exception:"+ex);
result.setResponseCode("Fail");
}
return result;}
参考图5,为本申请实施例二提供的一种kafka消费者客户端的性能测试装置的结构示意图,该装置可以配置在如图2所示的kafka的分布式消息系统中,用于对kafka消费者客户端进行性能测试,以提高测试效率。
具体的,本实施例中的装置可以包括以下结构:
JMeter501,所述JMeter中构建有线程组,且,所述线程组包括多个目标线程;
kafka取样器插件502,所述kafka取样器插件被添加在所述线程组中,所述kafka取样器插件中包括执行程序,且,所述kafka取样器插件能够呈现操作界面,所述操作界面用于获得被输入的多项测试参数,以使得所述JMeter根据所述执行程序和所述测试参数,构建基于JMeter的测试脚本并执行所述基于JMeter的测试脚本,以使得每个所述目标线程分别至少通过所述执行程序控制kafka生产者客户端按照所述测试参数向相应的kafka代理服务器发送消息;
测试组件503,用于在所述目标线程的执行过程中,获得所述kafka消费者客户端在所述的至少一项性能指标数据;根据所述性能指标数据,获得所述kafka消费者客户端对应的性能测试结果。
由上述方案可知,本申请实施例二提供的一种kafka消费者客户端的性能测试装置中,通过JMeter添加编写好的Kafka取样器插件即可实现可视化的操作界面,提供给用户输入测试参数,然后在据此构建基于JMeter的测试脚本后,执行该脚本,这样通过Kafka取样器插件中的执行程序控制kafka生产者客户端向kafka代理服务器发送消息,进而获得到kafka消费者客户端的性能指标数据,以获得性能测试结果。可见,本实施例中在JMeter上添加Kafka插件能够实现对kafka消费者客户端的可视化性能测试,kafka取样器插件只需要编写一次添加到基于JMeter构建的线程组中,就可以在用户输入测试参数后通过构建测试脚本实现对kafka消费者客户端的性能测试,无需每次都编写Kafka生产者发压测试程序,从而能够降低性能测试的操作复杂度,进而提高测试效率。
进一步的,本实施例中通过在线程组中配置多个目标线程,实现高并发的消息发送,能够进一步提高测试效率,也能够提高测试准确性。
另外,本实施例中用户可以通过操作界面根据实际需要进行测试参数的配置,由此提高性能测试的灵活性,进而能够改善测试体验。
在一种实现方式中,所述kafka取样器插件包括:
第一实现类,所述第一实现类继承JMeter的AbstractSamplerGui抽象类,所述第一实现类用于实现所述操作界面;
第二实现类,所述第二实现类继承JMeter的AbstractSampler抽象类,所述第二实现类用于实现所述执行程序。
其中,所述第一实现类中至少包括:
定义函数,用于初始化所述操作界面;
测试要素创建函数,用于创建取样器实例;
修改测试要素函数,用于将被输入到所述操作界面上的多项测试参数添加到所述取样器实例中。
另外,所述第一实现类中还包括:
配置函数,用于从输入的取样器实例中获取多项测试参数,将所述测试参数更新到所述操作界面;
重置函数,用于初始化所述操作界面中的界面元素的元素内容。
其中,所述第二实现类至少用于创建取样器结果对象,所述取样器结果对象中至少配置有kafka生产者对象;
其中,所述kafka生产者对象用于触发所述kafka生产者客户端按照所述取样器实例提供的所述测试参数向对应的kafka代理服务器发送消息。
另外,所述第二实现类还用于:
声明多个全局共享参数,所述全局共享参数用于存储所述取样器实施例提供的所述测试参数;
其中,所述测试参数包括:
kafka集群的地址、kafka主题、kafka生产者客户端的消息值序列化类名、kafka生产者客户端的消息键序列化类名、kafka生产者客户端消息发送的请求确认数量、kafka生产者客户端消息发送的重试次数、kafka生产者客户端消息发送到的Kafka分区、kafka生产者客户端发送的消息健、kafka生产者客户端发送的目标消息。
而且,所述取样器结果对象中还配置有:结果抓取函数,用于记录所述取样器实例的执行过程中的过程信息;其中,所述取样器实例的执行过程包括:所述取样器实例向所述kafka生产者客户端提供所述测试参数。
本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现前文中所述的kafka消费者客户端的性能测试方法。
本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行前文中所述的kafka消费者客户端的性能测试方法。
本发明实施例提供了一种电子设备,如图6中所示,设备包括至少一个处理器601、以及与处理器601连接的至少一个存储器602、总线603;其中,处理器601、存储器602通过总线603完成相互间的通信;处理器601用于调用存储器602中的程序指令,以执行上述的kafka消费者客户端的性能测试方法。本申请中的设备可以是服务器、PC、PAD、手机等。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:
利用kafka取样器插件所呈现的操作界面,获得被输入的多项测试参数;所述kafka取样器插件被添加在基于JMeter构建的线程组中,且,所述线程组包括多个目标线程;
根据所述kafka取样器插件中的执行程序和所述测试参数,构建基于JMeter的测试脚本;
执行所述基于JMeter的测试脚本,以使得每个所述目标线程分别至少通过所述执行程序控制kafka生产者客户端按照所述测试参数向相应的kafka代理服务器发送消息;
在所述目标线程的执行过程中,获得所述kafka消费者客户端的至少一项性能指标数据;
根据所述性能指标数据,获得所述kafka消费者客户端对应的性能测试结果。
以下以银行信息化项目所使用的kafka系统为例,对本申请中的技术方案进行举例说明:
首先,JMeter原生支持多种不同协议(HTTP、TCP、JDBC等)应用的性能测试。除了支持开箱即用的协议以外,JMeter的高扩展性支持用户自己开发新协议的测试插件来进行扩展。因此,通过基于JMeter开发Kafka测试插件,用来扩展支持模拟Kafka生产者客户端向Kafka Broker服务器发压的性能测试方法是可行的。基于JMeter的Kafka测试插件实现GUI,是一种可视化的Kafka发压测试工具,并且支持高并发执行和参数化配置,可以显著地提升Kafka消费方程序性能测试效率和质量。
具体的,本申请提出了一种开发JMeter可视化插件进行Kafka消费者客户端性能测试的方法,并基于该方法设计实现了一个基于JMeter的可视化Kafka取样器插件,使用该插件可以执行向Kafka Broker服务器发压,开展Kafka消费方程序的性能测试。
其中,Kafka取样器插件的设计实现主要包括Kafka取样器界面组件的设计和Kafka取样器的业务逻辑实现两个方面。Kafka取样器的具体实现类需要继承AbstractSamplerGui和AbstractSampler两个抽象类并实现相应的方法。
AbstractSamplerGui抽象类继承自AbstractJMeterGuiComponent,负责取样器的UI呈现和向取样器实例赋值。需要实现的具体方法有init、modifyTestElement、createTestElement、configure、clearGui方法等。
AbstractSampler抽象类继承自AbstractTestElement抽象类,主要负责与GUI数据传递、实现取样器业务逻辑以及对JMeter引擎的调用。需要实现的具体方法有构造函数、sample方法等。在测试过程中主要的业务逻辑实现都在sample方法中,包括测试开始前的数据预处理、返回结果的判断等。
下面详细说明基于JMeter的Kafka取样器的具体实现方案。
首先说明Kafka取样器UI的设计实现。通过编写KafkaSamplerGui这个实现类扩展继承了AbstractSamplerGui抽象类并实现相应的方法。详细如前文中所示。
接下来说明Kafka取样器业务逻辑的设计实现。通过编写KafkaSampler这个实现类扩展继承了AbstractSampler抽象类并实现相应的方法。详细如前文中所示。
基于此,下面说明本申请提出的一种Kafka消费者客户端的性能测试方法。该性能测试方法的具体流程步骤如下:
步骤1:使用Kafka取样器时,依赖JMeter的基本功能。建立一个线程组,设置多线程运行可用于模拟Kafka生产者端向Kafka Broker服务器发压。
步骤2:在线程组中添加Kafka取样器,在Kafka取样器界面填写Kafka集群IP地址、生产者消息发送到的Kafka主题、生产者消息值序列化类名、生产者消息键序列化类名、生产者消息发送的请求确认数量、生产者消息发送的重试次数、生产者消息发送到的Kafka分区、生产者发送的消息健、以及生产者发送的消息。
步骤3:如果Kafka取样器中有参数化需求,可以通过配置元件或者前置处理器来完成;如果Kafka取样器中有关联需求,可以通过后置处理器来完成;如果要控制Kafka取样器的执行逻辑,可以通过逻辑控制器来完成。
步骤4:设计好的Kafka取样器JMeter测试脚本可以在Windows或Linux环境下执行。
步骤5:开始执行JMeter测试脚本,向Kafka Broker服务器发压后,可以通过监控工具或者应用日志记录Kafka消费方程序的消息处理性能指标(时长、TPS、吞吐量等),验证性能测试结果是否满足预期需求。
综上,本申请提出了一种Kafka消费者客户端性能测试方法及可视化测试装置。由于Kafka取样器插件是基于JMeter扩展接口开发实现的,可以与JMeter本身的测试计划、线程组、配置组件、断言、前置处理器、后置处理器、逻辑控制器、定时器、监听器等组件结合,因此,在使用上便捷灵活,测试成本较低,显著提升了Kafka消费方程序性能测试的质效。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种kafka消费者客户端的性能测试方法,其特征在于,所述方法包括:
利用kafka取样器插件所呈现的操作界面,获得被输入的多项测试参数;所述kafka取样器插件被添加在基于JMeter构建的线程组中,且,所述线程组包括多个目标线程;
根据所述kafka取样器插件中的执行程序和所述测试参数,构建基于JMeter的测试脚本;
执行所述基于JMeter的测试脚本,以使得每个所述目标线程分别至少通过所述执行程序控制kafka生产者客户端按照所述测试参数向相应的kafka代理服务器发送消息;
在所述目标线程的执行过程中,获得所述kafka消费者客户端的至少一项性能指标数据;
根据所述性能指标数据,获得所述kafka消费者客户端对应的性能测试结果。
2.根据权利要求1所述的方法,其特征在于,所述kafka取样器插件包括:
第一实现类,所述第一实现类继承JMeter的AbstractSamplerGui抽象类,所述第一实现类用于实现所述操作界面;
第二实现类,所述第二实现类继承JMeter的AbstractSampler抽象类,所述第二实现类用于实现所述执行程序。
3.根据权利要求2所述的方法,其特征在于,所述第一实现类中至少包括:
定义函数,用于初始化所述操作界面;
测试要素创建函数,用于创建取样器实例;
修改测试要素函数,用于将被输入到所述操作界面上的多项测试参数添加到所述取样器实例中。
4.根据权利要求3所述的方法,其特征在于,所述第一实现类中还包括:
配置函数,用于从输入的取样器实例中获取多项测试参数,将所述测试参数更新到所述操作界面;
重置函数,用于初始化所述操作界面中的界面元素的元素内容。
5.根据权利要求3所述的方法,其特征在于,所述第二实现类至少用于创建取样器结果对象,所述取样器结果对象中至少配置有kafka生产者对象;
其中,所述kafka生产者对象用于触发所述kafka生产者客户端按照所述取样器实例提供的所述测试参数向对应的kafka代理服务器发送消息。
6.根据权利要求5所述的方法,其特征在于,所述第二实现类还用于:
声明多个全局共享参数,所述全局共享参数用于存储所述取样器实施例提供的所述测试参数;
其中,所述测试参数包括:
kafka集群的地址、kafka主题、kafka生产者客户端的消息值序列化类名、kafka生产者客户端的消息键序列化类名、kafka生产者客户端消息发送的请求确认数量、kafka生产者客户端消息发送的重试次数、kafka生产者客户端消息发送到的Kafka分区、kafka生产者客户端发送的消息健、kafka生产者客户端发送的目标消息。
7.根据权利要求5所述的方法,其特征在于,所述取样器结果对象中还配置有:
结果抓取函数,用于记录所述取样器实例的执行过程中的过程信息;
其中,所述取样器实例的执行过程包括:
所述取样器实例向所述kafka生产者客户端提供所述测试参数。
8.一种kafka消费者客户端的性能测试装置,其特征在于,所述装置包括:
JMeter,所述JMeter中构建有线程组,且,所述线程组包括多个目标线程;
kafka取样器插件,所述kafka取样器插件被添加在所述线程组中,所述kafka取样器插件中包括执行程序,且,所述kafka取样器插件能够呈现操作界面,所述操作界面用于获得被输入的多项测试参数,以使得所述JMeter根据所述执行程序和所述测试参数,构建基于JMeter的测试脚本并执行所述基于JMeter的测试脚本,以使得每个所述目标线程分别至少通过所述执行程序控制kafka生产者客户端按照所述测试参数向相应的kafka代理服务器发送消息;
测试组件,用于在所述目标线程的执行过程中,获得所述kafka消费者客户端在所述的至少一项性能指标数据;根据所述性能指标数据,获得所述kafka消费者客户端对应的性能测试结果。
9.一种电子设备,其特征在于,包括至少一个处理器、以及与处理器连接的至少一个存储器、总线;其中,所述处理器、所述存储器通过所述总线完成相互间的通信;所述处理器用于调用所述存储器中的程序指令,以执行如权利要求1-7中任一项所述的kafka消费者客户端的性能测试方法。
10.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序执行权利要求1~7任意一项权利要求所述的kafka消费者客户端的性能测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311622653.9A CN117609043A (zh) | 2023-11-30 | 2023-11-30 | kafka消费者客户端的性能测试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311622653.9A CN117609043A (zh) | 2023-11-30 | 2023-11-30 | kafka消费者客户端的性能测试方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117609043A true CN117609043A (zh) | 2024-02-27 |
Family
ID=89957700
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311622653.9A Pending CN117609043A (zh) | 2023-11-30 | 2023-11-30 | kafka消费者客户端的性能测试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117609043A (zh) |
-
2023
- 2023-11-30 CN CN202311622653.9A patent/CN117609043A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109302522B (zh) | 测试方法、装置以及计算机系统和介质 | |
US8510712B1 (en) | Testing in-container software objects | |
US8898643B2 (en) | Application trace replay and simulation systems and methods | |
US11762763B2 (en) | Orchestration for automated performance testing | |
US8677324B2 (en) | Evaluating performance of an application using event-driven transactions | |
US7827535B2 (en) | Application performance tuning server-side component | |
US20080209405A1 (en) | Distributed debugging for a visual programming language | |
CN112765023B (zh) | 测试用例生成方法、装置 | |
US20170048120A1 (en) | Systems and Methods for WebSphere MQ Performance Metrics Analysis | |
CN111444111A (zh) | 基于python的性能测试方法、装置、计算机设备及存储介质 | |
US10439887B2 (en) | Generic test framework for service interfaces | |
US8918762B2 (en) | Generating test plans and test cases from service-oriented architecture and process models | |
CN107045475B (zh) | 测试方法和装置 | |
US20230401058A1 (en) | Semantic functional wrappers of services | |
Jain et al. | Performance analysis of various server hosting techniques | |
WO2021162860A1 (en) | Multi-tenant java agent instrumentation system | |
CN112217886B (zh) | 分布式系统的测试方法及系统、消息生产及消费模块 | |
CN117609043A (zh) | kafka消费者客户端的性能测试方法及装置 | |
US8522256B2 (en) | Hosting non-messaging workflows in a messaging host | |
CN111294250B (zh) | 压力测试方法、装置和系统 | |
CN112035360A (zh) | 中间件测试方法、装置、计算机设备及可读存储介质 | |
CN116303062B (zh) | 服务接口的测试方法、装置、终端设备和可读存储介质 | |
CN112988585B (zh) | 一种PaaS平台测试方法、装置、设备及介质 | |
CN116028344A (zh) | 一种测试结果统计的方法、装置及相关产品 | |
CN116974882A (zh) | 接口测试方法及相关装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |