性能测试之中间件:什么是 kafka 和 MQ ?

news2024/11/15 10:42:46

在如今这个数据驱动的时代,中间件在性能测试中扮演着至关重要的角色。你是否曾听说过Kafka和MQ,却不清楚它们在实际应用中具体的作用是什么?让我们一起来揭开它们的神秘面纱。

Kafka和MQ究竟是什么?它们在性能测试中如何发挥作用,又为何成为现代分布式系统中的关键组成部分?

Kafka是一种分布式流处理平台,常用于构建实时数据管道和流式应用。它能够处理海量的数据流,并确保数据的高效传输和持久化。例如,在电商平台中,Kafka可以实时处理用户的行为数据,帮助企业做出及时的商业决策。

相比之下,MQ(Message Queue)是一种消息传递中间件,用于解耦和缓冲系统之间的数据传输。以银行系统为例,MQ可以在客户交易时,将交易信息缓冲处理,确保交易系统的稳定性和高效性。


在做项目的性能测试时,MQ和Kafka经常会是项目服务架构中非常重要的组成部分,负责处理大量的实时数据流,如日志收集、消息队列、事件流处理等,Kafka和MQ的性能会直接影响整个系统的表现。所以,我们做性能测试的时候经常也需要关注一下MQ中间件的性能。


消息队列【MQ】

消息队列,英文名:Message Queue,经常缩写为MQ。从字面上来理解,消息队列是一种用来存储消息的队列,我们可以简单理解消息队列就是将需要传输的数据存放在队列中。

而真正用来存储消息的软件(组件)叫做消息队列中间件。举个例子来理解,为了分析网站的用户行为,我们需要记录用户的访问日志。这些一条条的日志,可以看成是一条条的消息,我们可以将它们保存到消息队列中。将来有一些应用程序需要处理这些日志,就可以随时将这些消息取出来处理。

目前市面上的消息队列的中间件有很多,例如:Kafka、RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ等。

MQ应用场景

1、异步处理

举例:电商网站中,新的用户注册时,需要将用户的信息保存到数据库中,同时还需要额外发送注册的邮件通知、以及短信注册码给用户。但因为发送邮件、发送注册短信需要连接外部的服务器,需要额外等待一段时间,这样就会造成用户的响应时间很长,体验很差:

图片

所以,此时我们就可以使用消息队列来进行异步处理,从而实现快速响应,提高用户的体验。

  • 保存用户注册信息到数据库后,就直接返回给用户响应消息,这样用户就可以在非常短的时间里收到注册成功的使用体验;

  • 而剩下的发送注册的邮件通知、以及短信注册码的消息写到消息队列里,跟用户收到回复信息的步骤异步执行,从而实现快速响应。

图片

 

2、系统解耦

比如:用户秒杀需要下单,访问订单系统的时候订单系统需要保存用户的订单信息,并且调用接口访问库存系统,让库存系统同步减少库存;

在这个业务流程里,如果库存系统出现的问题,就会导致订单系统下单失败,而且如果库存系统接口修改了,会导致订单系统也无法工作了!这样的设计,会让两个系统之间的依赖性很强,系统出现问题的场景就会比较多。

图片

为了解决以上问题,我们可以使用消息队列来实现系统和系统之间的解耦。如下图所示:

  • 订单系统不再调用库存系统的接口,而是把订单消息写到消息队列里;

  • 库存系统从消息队列中拉取消息,然后再减库存,从而实现系统解耦,减少系统之间的依赖,降低问题出现的频率。

图片

3、流量削峰

这个场景也比较常见,比如我们用12306抢火车票的时候:上亿的用户会同时对服务器发起请求,每一个请求都会去业务数据库里请求数据查询或者变更上的话,数据库压力就会很大;而且人越多反应越慢,用户可能越会疯狂刷新页面,这样会造成更大的并发,瞬间会压垮mysql。

图片

所以,为了解决以上的问题,我们同样可以使用消息队列,因为消息队列的吞吐量比起业务数据库的吞吐来你跟要大很多:mysql数据库的吞吐量大概8000左右,消息队列比如kafka中间件的吞吐量大概在10w左右。用户发给服务器的请求,服务器先发给消息队列,然后立马可以给用户返回,用户端能看到的信息就可能是在排队中。这样用户有收到响应就不会疯狂刷新页面,造成更大的压力了。

图片

4、日志处理

大型电商网站(淘宝、京东、国美、苏宁...)、App(抖音、美团、滴滴等)等需要分析用户行为,要根据用户的访问行为来发现用户的喜好以及活跃情况,需要在页面上收集大量的用户访问信息。

图片

Kafka

了解了消息队列之后,kafka作为MQ中非常主流的一个的中间件,我们来介绍一下kafka。

kafka是一个分布式、高吞吐量、高扩展性的消息队列系统。主要应用在日志收集系统和消息系统,也可以叫做KafkaMQ。总之,Kafka比其他消息队列要好一点,优点也比较多,稳定性和效率都比较高。

kafka的诞生背景

kafka的诞生,是为了解决linkedin的数据管道问题,起初linkedin采用了ActiveMQ来进行数据交换,大约是在2010年前后,那时的ActiveMQ还远远无法满足linkedin对数据传递系统的要求,经常由于各种缺陷而导致消息阻塞或者服务无法正常访问,为了能够解决这个问题,linkedin决定研发自己的消息传递系统,当时linkedin的首席架构师jay kreps便开始组织团队进行消息传递系统的研发。

在大数据技术领域,一些重要的组件、框架都支持Apache Kafka,不论成成熟度、社区、性能、可靠性,Kafka都是非常有竞争力的一款产品。

kafka的重要概念

1)producer(生产者):生产者就是发送消息的,生产者每发送一个条消息必须有一个Topic(主题),也可以说是消息的类别,生产者源源不断的向kafka服务器发送消息。

2)Topic(主题):每一个发送到Kafka的消息都有一个主题,也可叫做一个类别,类似我们传统数据库中的表名一样,比如说发送一个主题为order的消息,那么这个order下边就会有多条关于订单的消息,只不过kafka称之为主题,都是一样的道理;

3)Partition(分区):生产者发送的消息数据Topic会被存储在分区中,这个分区是想把数据分成多个块,达到负载均衡,合理的把消息分布在不同的分区上,分区是被分在不同的B服务器上,这样我们大量的消息就实现了负载均衡。每个Topic可以指定多个分区,但是至少指定一个分区。每个分区存储的数据都是有序的,不同分区间的数据不保证有序性。因为如果有了多个分区,消费数据的时候肯定是各个分区独立开始的,有的消费得慢,有的消费得快肯定就不能保证顺序了。那么当需要保证消息的顺序消费时,我们可以设置为一个分区,只要一个分区的时候就只能消费这个一个分区,那自然就保证有序了。

4) Replica(副本):副本就是分区中数据的备份,是Kafka为了防止数据丢失或者服务器宕机采取的保护数据完整性的措施,一般的数据存储软件都应该会有这个功能。如果有某些服务器宕机,我们可以通过副本恢复数据,也可以暂时用副本中的数据来使用。

5)Broker(实例或节点):就是Kafka的实例,启动一个Kafka就是一个Broker,多个Brokder构成一个Kafka集群,这就是分布式的体现,服务器多了自然吞吐率效率啥的都上来了。

6)Consumer Group(消费者组)和 Consumer(消费者):Consume消费者来读取Kafka中的消息,可以消费任何Topic的数据,多个Consume组成一个消费者组,一般的一个消费者必须有一个组(Group)名,如果没有的话会被分一个默认的组名。

如下图就包括了2个Producer(生产者),一个Topic(主题),3个Partition(分区),3个Replica(副本),3个Broker(Kafka实例或节点),一个Consumer Group(消费者组),其中包含3个Consumer(消费者)

图片

kafka 在性能测试中的应用场景

1、在什么样的项目里需要关注kafka的性能?

如果 Kafka 是项目中数据流处理的核心部分,负责处理大量的实时数据流,如日志收集、消息队列、事件流处理等,或者项目需要处理高吞吐量数据的场景中,Kafka 的性能会直接影响整个系统的表现。如果系统依赖 Kafka 处理和传递大量消息,测试 Kafka 的吞吐量、延迟等指标是至关重要的。

2、在性能测试或实际生产环境中,以下一些关键指标的异常可能表明 Kafka 出现了问题,我们需要去分析和调优:

1) 吞吐量下降:系统整体的消息处理速度明显下降,即每秒处理的消息数量减少。Kafka 的生产者或消费者无法以预期的速度发送或接收消息。

可能原因:

  • Kafka 集群的带宽或 I/O 达到瓶颈,导致无法处理更多的消息。

  • 分区数不足或副本同步速度过慢,导致生产者和消费者的处理速度受到限制。

  • 内部队列(如 Broker 的缓冲区或网络层队列)积压,导致吞吐量下降。

2)消息延迟增加:从生产者发送消息到消费者接收到消息的时间(端到端延迟)显著增加。

可能原因:

  • Kafka 的内部缓冲区或日志队列积压,导致消息在 Broker 内部的处理变慢。

  • 网络延迟或带宽不足,导致生产者或消费者与 Broker 之间的通信变慢。

  • 由于 Kafka 的副本同步问题(例如 ISR 列表中有节点失效),导致消息在写入时需要等待其他副本的同步,增加延迟。

3)消费者滞后(Lag)增加:Kafka 消费者滞后明显增加,即消费者无法及时处理已提交到 Kafka 的消息,造成未消费的消息积压。

可能原因:

  • 消费者的处理能力不足,无法跟上生产者的消息发送速度。

  • Kafka Broker 处理负载过高,导致消息无法及时发送到消费者。

  • 分区分配不均或消费者群组配置不当,导致部分分区处理速度远慢于其他分区。

 

4)磁盘 I/O 使用率过高:Kafka Broker 的磁盘 I/O 使用率接近或达到100%,导致系统性能下降。

可能原因:

  • Kafka 日志文件的写入和清理操作频繁,导致磁盘 I/O 成为瓶颈。

  • Kafka 配置不当,如日志分段(log segment)过小,导致频繁的日志文件创建和删除操作。

  • 大量的持久化消息写入操作占用了磁盘带宽,影响到 Kafka 的正常运行。

5)CPU 使用率过高:Kafka Broker 的 CPU 使用率持续高企,导致其他任务无法顺利执行。

 

可能原因:

  • Kafka Broker 在处理大量请求(如高频的生产和消费操作)时占用大量 CPU 资源。

  • 数据压缩或解压缩、加密或解密操作过多,导致 CPU 资源紧张。

  • 不合理的批量设置或频繁的上下文切换,导致 CPU 负载过高。

6)网络带宽占用率过高:Kafka Broker 的网络带宽使用接近或达到上限,导致消息传输延迟或丢包。

可能原因:

  • 高频的数据传输或大量副本同步操作导致网络带宽不足。

  • 生产者和消费者之间的数据传输过于频繁,超过了网络的处理能力。

  • Kafka 集群中节点之间的副本同步流量过大,影响了生产和消费的正常流量。

7)高频率的垃圾回收(GC)活动:Kafka Broker 出现频繁的垃圾回收活动,导致系统停顿和性能下降。

可能原因:

  • Kafka 配置的内存(heap size)过小,导致 JVM 频繁进行 GC 操作。

  • Kafka 的内存管理不当,导致内存碎片或大量对象驻留在堆内存中。

  • 由于高负载或错误的配置,Kafka Broker 产生了大量短生命周期的对象,增加了 GC 负担。

 

8)高频率的 ISR 列表变动:Kafka 的 ISR(In-Sync Replica)列表频繁变动,导致分区副本状态不稳定。

可能原因:

  • Kafka 集群中的某些 Broker 出现网络问题或资源不足,导致副本掉线和恢复频繁发生。

  • 磁盘 I/O 性能问题或网络延迟导致副本无法及时同步数据,进而被移出 ISR 列表。

  • 配置了过短的超时设置(如 **replica.lag.time.max.ms),导致副本被频繁踢出 ISR 列表。

 

9)消息丢失或重复:系统中出现了消息丢失或重复消费的现象,影响了数据的一致性。

可能原因:

  • Kafka 的副本机制或事务性配置未正确设置,导致在 Broker 故障或重启时发生消息丢失。

  • 消费者配置错误,导致在重新平衡时重复消费消息。

  • 生产者在发送消息时未正确处理 acks 设置,导致消息未被可靠接收。

10)集群的稳定性下降:Kafka 集群中频繁出现节点失效、分区不可用、重新平衡等现象。

可能原因:

  • Kafka Broker 配置不当或硬件资源不足,导致在高负载下节点失效。

  • 网络问题导致 Kafka 集群中的节点无法正常通信,引发集群不稳定。

  • 副本数量配置不足,导致在节点失效时,分区不可用。

随着企业对数据实时性和系统可扩展性要求的提升,Kafka和MQ的应用场景越来越广泛。在大数据和云计算的推动下,企业纷纷采用这类中间件来提高系统性能和数据处理能力。同时,这也反映了现代企业在应对复杂业务需求时,越来越注重系统架构的稳定性和灵活性。

如果你正在考虑如何优化企业的性能测试和数据处理,不妨了解一下Kafka和MQ。这些中间件不仅能够提升系统的可靠性,还能帮助你更好地应对大规模数据处理的挑战。

Kafka和MQ作为现代分布式系统中的重要中间件,正在帮助越来越多的企业实现数据的高效传输和系统的性能优化。理解它们的工作原理和应用场景,不仅能提升你在性能测试中的技能,还能为你在大数据时代的职业发展铺平道路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2054507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#基于SkiaSharp实现印章管理(6)

除了文本,印章设计模块的绘图功能已经差不多了。在实现文本绘制之前(主要是文本绘制相对比较麻烦),本文先实现将印章导出为pdf或图片的功能。   不论是在控件中绘制,还是在图片或pdf文件中绘制印章,对Ski…

基于web网上村委会业务办理系统pf

TOC springboot472基于web网上村委会业务办理系统pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化&…

电话机器人解决销售难题

电销机器人简单理解就是替电销人员打电话的机器人,都说是机器人了,全天保持无休状态肯定是不在话下的。智能外呼电话机器人每日通话量大概在800-1000通,一个AI电话机器人就能顶3个销售人员的日通话量了,电话营销机器人能在批量上传…

高校中的电能消耗管理

2013年1月,住建部发布《绿色建筑行动方案》(国办发「2013」1号)。要求学校、医院等大型公共建筑全面执行绿色建筑标准。安全耐久、生活便利不再是绿色建筑的评价唯一指标,资源节约、环境宜居和健康舒适同样也是绿色建筑的评价指标…

5G+工业互联网产教融合创新实训室解决方案

一、建设背景 随着第五代移动通信技术(5G)的快速普及和工业互联网的迅猛发展,全球制造业正面临着前所未有的深刻变革。5G技术凭借其超高的传输速率、极低的延迟以及大规模的连接能力,为工业自动化、智能制造等领域带来了革命性的…

【NXP-MCXA153】PWM驱动移植

介绍 ‌PWM(‌Pulse Width Modulation)‌,‌脉冲宽度调制,‌是一种数字量控制模拟量的技术,‌常用于电机驱动、显示屏背光控制、逆变控制等;NXP-MCXA153开发板上有多路CTimer定时器,可以用来生…

6. 数据结构—串的匹配算法

1.BF算法(暴力算法) //模式匹配(暴力算法) int Index(SString S,SString T){int i1,j1;while(i<S.length&&j<T.length){if(S[i]T[i]){i;j;}else{ii-j2; //最开始匹配的位置的后一个j1; //从头匹配 }}if(j>T.length)return i-T.length;return return 0…

【Vue3】配置路由规则props

【Vue3】配置路由规则props 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的…

Ubuntu启用root用户

1.1 命令行的组成 在启用 root 用户之前&#xff0c;先来了解一下&#xff0c;ubuntu 命令的组成。 打开 ubuntu 的终端&#xff0c;可以看到命令行是由 topeetubuntu:~$ 这几个字母组成&#xff0c;如下图所示&#xff1a; 对应的说明框图如下&#xff1a; 1.2 由普通用户切…

基于机器视觉的智能图像处理与分析系统(MATLAB图片处理,GUI界面)

灰度&#xff0c;二值&#xff0c;去噪&#xff0c;均衡&#xff0c;锐化&#xff0c;截取&#xff0c;边缘检测&#xff0c;都可做。 ☆图像灰度化&#xff0c;二值化 ☆图像相加&#xff0c;相减等 ☆图像旋转&#xff0c;图像裁剪 ☆图像灰度变换&#xff0c;gamma变换&…

Github 2024-08-19 开源项目周报Top15

根据Github Trendings的统计,本周(2024-08-19统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目7JavaScript项目3TypeScript项目3Dart项目2HTML项目1PowerShell项目1Clojure项目1C++项目1Rust项目1Bootstrap 5: Web上开发响应式、…

微服务:微服务保护

&#x1f4a5; 该系列属于【SpringBoot基础】专栏&#xff0c;如您需查看其他SpringBoot相关文章&#xff0c;请您点击左边的连接 目录 一、引言 1. 什么是雪崩问题 2. 雪崩问题产生的原因 3. 解决思路 二、微服务保护 1. 服务保护方案 &#xff08;1&#xff09;请求限…

03 serv00搭建WordPress

第一步 下载 serv00 官方教程 按官方教程下载 WordPress 压缩包&#xff0c;解压&#xff0c;将 WordPress 项目文件夹重命名为 public_html&#xff08;先删除原来的 public_html&#xff09; ‍ 第二步 安装 完成以上步骤后访问你的网站&#xff0c;开始安装 WordPress …

ESXi中设置网卡为混杂模式

为了测试系统网络问题&#xff0c;将ESXi中设置网卡设为混杂模式&#xff0c;如图 设置方法为进入编辑状态&#xff0c;然后将混杂模式选中&#xff1a; CBSD关于网络的一段描述 About bhyve networking By default, virtual machines use the tap interface, which CBSD aut…

WiFi的IP和电脑IP一样吗

在当今数字化时代&#xff0c;互联网已成为我们生活、学习和工作不可或缺的一部分。而网络连接的核心要素之一&#xff0c;就是IP地址。无论是通过WiFi接入网络的设备&#xff0c;还是直接连接至路由器的电脑&#xff0c;它们都拥有各自的IP地址。然而&#xff0c;这两个IP地址…

SQL 布尔盲注 (injection 第六关)

简介 SQL注入&#xff08;SQL Injection&#xff09;是一种常见的网络攻击方式&#xff0c;通过向SQL查询中插入恶意的SQL代码&#xff0c;攻击者可以操控数据库&#xff0c;SQL注入是一种代码注入攻击&#xff0c;其中攻击者将恶意的SQL代码插入到应用程序的输入字段中&am…

大华 DSS 数字监控系统 group_saveGroup SQL 注入漏洞复现

0x01 产品简介 大华 DSS 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。 0x02 漏洞概述 大华 DSS 数字监控系统 group_saveGroup 接口存在SQL 注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞…

计算机毕业设计pyspark+django+scrapy租房推荐系统 租房大屏可视化 租房爬虫 hadoop 58同城租房爬虫 房源推荐系统

用到的技术: 1. python 2. django后端框架 3. django-simpleui&#xff0c;Django后台 4. vue前端 5. element-plus&#xff0c;vue的前端组件库 6. echarts前端可视化库 7. scrapy爬虫框架 基于大数据的租房信息推荐系统包括以下功能&#xff1a…

一、什么是 mvvm? MVC、MVP、MVVM三种模式的区别与详解

简介 MVC、MVP、MVVM都是常见的软件架构模式。 MVC&#xff08;Model-View-Controller&#xff09;架构模式中&#xff0c;将应用程序分为三个主要部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&…

VBA技术资料MF185:图片导入Word添加不同格式说明文字

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…