消息队列的测试点

在这里插入图片描述


消息队列的测试点

  • 一、常用的消息队列产品
    • 1、挑战性问题
  • 二、kafka简介
  • 三、消息的生产
  • 四、消息的存储
  • 五、Kafka的特性
  • 六、kafka测试要点

一、常用的消息队列产品

基于内存的消息队列

  • RabbitMQ:适用于处理高并发场景,广泛用于即时消息传递
  • RabbitMQ:适合轻量级应用,例如日记收集、任务分发

基于磁盘的消息队列

  • Kafka:高吞吐显著,适合大数据处理,常用于构建实时数据管道和流式应用
  • kafka能够支持每秒数百万级别的消息吞吐量,适合构建高流量的实时消息系统。

高吞吐选择kafka
低延迟选择RabbitMQ

1、挑战性问题

在这里插入图片描述
在这里插入图片描述

二、kafka简介

Kafka是一个分布式基于发布/订阅的消息系统;支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以,实时的处理大量数据以满足各种需求场景

Kafka 是集群架构的,有多个broker 物理节点,Topic 和 Partition 存储在 broker 物理节点中,ZooKeeper负责维护这些broker,管理着所有的 Topic 和 Partition。

在这里插入图片描述
如上图所示,一个典型的kafka集群中包含若干producer若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干consumer group以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。producer使用push模式将消息发布到broker,consumer使用puIl模式从broker订阅并消费消息

  • Broker
    • Kafka集群包含一个或多个服务器,这种服务器被称为broker,Kafka中使用Broker来接受Producer和Consumer的请求,并把Message持久化到本地磁盘。每个Cluster当中会选举出一个Broker来担任Controller,负责处理Parition的Leader选举,协调Partition迁移等工作。
  • Topic
    • 每条发布到Kafka集群的消息都有一个类别,这个类别被称为topic。(物理上不同topic的消息分开存储,逻辑上一个topic的消息虽然保存于一个或多个broker上但用户只需指定消息的topic即可生产或消费数据而不必关心数据存于何处)
  • Partition
    • parition是物理上的概念,每个topic包含一个或多个partition,创建topic时可指定parition数量。每个partition对应于一个文件夹,该文件夹下存储该partition的数据和索引文件
  • Producer
    • 负责发布消息到Kafka broker
  • Consumer
    • 消费消息。每个consumer属于一个特定的consumer group(可为每个consumer指定group name,若不指定group name则属于默认的group)。使用consumer high level APl时,同一topic的一条消息只能被同一个consumer group内的一个consumer消费,但多个consumer group可同时消费这一消息
  • Offset(偏移量)
    • 消息在Parition中的编号,编号顺序不跨Partition。在kafka中生产者和消费者主要就是依靠Offset进行控制消息的发送和消费

举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。
再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,“鸡蛋"又丢失了。
这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里,而这个篮子就是"kafka”。鸡蛋其实就是“数据流”,系统之间的交互都是通过“数据流”来传输的,也叫“消息”。
消息队列满了,其实就是篮子满了,”鸡蛋“放不下了,那赶紧多放几个篮子,其实就是kafka的扩容。

三、消息的生产

1)Producer发送消息,默认采用随机负载均衡的模式发送消息
2)Producer发送消息,可以采用自己制定的负载均衡的模式发送消息。
3)也可以在发送一条消息时,指定这条消息的key,Producer根据这个key和Parition机制来判断应该将这条消息发送到哪个Parition,则key相同的消息会被发送并存储到同一个parition里,而且key的序号正好和Parition序号相同。(Parition序号从0开始,本例中的key也从0开始)*

Partition:3,   Message Payload:The 1 message for key 3
Partition:3,   Message Payload:The 2 message for key 3
Partition:3,   Message Payload:The 3 message for key 3
Partition:3,   Message Payload:The 4 message for key 3
Partition:3,   Message Payload:The 5 message for key 3
Partition:1,   Message Payload:The 1 message for key 1
Partition:1,   Message Payload:The 2 message for key 1
Partition:1,   Message Payload:The 3 message for key 1
Partition:1,   Message Payload:The 4 message for key 1
Partition:1,   Message Payload:The 5 message for key 1

四、消息的存储

谈到kafka的存储,就不得不提到分区,即partitions,创建一个topic时,同时可以指定分区数目,分区数越多,其吞吐量也越大,但是需要的资源也越多,同时也会导致更高的不可用性,kafka在接收到生产者发送的消息之后,会根据均衡策略将消息存储到不同的分区中。

在每个分区中,消息以顺序存储,最晚接收的的消息会最后被消费。
每个partition为一个目录,pariton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1

五、Kafka的特性

(1)高吞吐量、低延迟kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition,consumer group 对partition进行consume操作;
(2)可扩展性:kafka集群支持热扩展;
(3)持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;
(4)容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败);
(5)高并发:支持数千个客户端同时读写;
(6)支持实时在线处理和离线处理:可以使用Storm这种实时流处理系统对消息进行实时进行处理,同时还可以使用Hadoop这种批处理系统进行离线处理;

六、kafka测试要点

正常:

  • 生产的消息

    • 消息的正确性:
      • 验证不同类型的消息能否成功发送到队列(文本、二进制数据)

      • 字段是否正确、业务场景是否正确、是否正常落库

      • 生产的符合业务场景的消息

    • 消息发送的频率控制
      • 验证系统能够处理高频率的消息发送,保证消息队列的稳定性
  • 消费的消息

    • 消息队列的连接测试
      • 验证消息队列客户端能否成功建立连接,并确保连接状态,例如RabbitMQ连接测试
    • 消息接收确认机制
      • 检查消息队列是否能够正确处理消息确认,确保消息被正确消费
    • 消息接收顺序性
      • 测试消息是否按照发送顺序被接收,保证数据的一致性和顺序性

异常:

  • 生产者异常
    • 相同的数据是否重复生产消息,重复生产是否有拦截
    • 写入数据库异常时,是否有重试
    • 生产的速度,过快是否有消息堆积
  • 消费者异常
    • 相同的消息是否不重复消费
    • 消费异常时是否能补单

消息持久化测试

验证消息队列在系统故障后能够正确恢复消息状态

队列管理测试

验证队列的属性设置:最大消息大小、消息过期时间

多消费者模式

多个消费者同时从同一个队列接收消息,验证消息分配是否合理(轮询、权重)

性能-吞吐量

监控在高吞吐下系统的资源(CPU、内存)的使用情况

性能-延迟

测试消息从发送到被处理的平均时间,确保系统相应速度符合预期
测试消息在不同的网络条件下发送消息的时间
测试在高负载的情况下测试消息的延迟性,确保在压力的情况下,仍然能保持稳定性能

可靠性-消息重发机制

故意使消费者接收消息失败,检查消息队列是否能够自动重发
测试重发次数、重发间隔等参数是否这只有效
为防止消息重复处理,系统需要实现幂等性,确保消息重发不会影响业务逻辑

安全-访问权限

确保只有权限用户才能访问特定的消息队列,防止未授权访问

安全-数据加密

验证消息在传输和存储过程中是否能够被篡改

可拓展性测试

增加消息队列的节点数量,测试系统的性能和吞吐量是否能够线性提升。

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

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

相关文章

web实操1——只使用tomcat发布网站

安装tomcat 下载 肯定是去官网: http://tomcat.apache.org/ 下载之后,解压: !!解压后: logs日志:就是一些输出,输到文本里。 temp:一些临时文件(不用管) webapps:放网站的 work&…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十七集:制作第二个BOSS燥郁的毛里克

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、制作游戏第二个BOSS燥郁的毛里克 1.导入素材和制作相关动画1.5处理玩家受到战吼相关行为逻辑处理2.制作相应的行为控制和生命系统管理3.制作战斗场景和战斗…

HarmonyOS开发 - 餐饮APP中多门店多窗口打开实例补充

specified启动模式为指定实例模式,有一些特殊场景,例如多门店应用中每次打开一个门店都希望能新建一个门店实例,而重复打开同一个门店都是同一门店实例。 此篇为餐饮APP中多门店实例的补充内容,以解决同一门店多次点击重复创建新窗…

FreeRTOS 13:FreeRTOS队列的读原理

队列读取消息 FreeRTOS 中用于从队列中读取消息的 API 函数如下表所示: xQueueReceive BaseType_t xQueueReceive( QueueHandle_t xQueue,void * const pvBuffer,TickType_t xTicksToWait ) {BaseType_t xEntryTimeSet pdFALSE;TimeOut_t xTimeOut;Queue_t * con…

山东路远生态科技有限公司竣工投产仪式暨产品发布会圆满举行

第二十届三中全会于2024年7月15日至18日在北京举行。全会审议通过了《关于进一步全面深化改革、推进中国式现代化的决定》。其中提到,“要健全因地制宜发展新质生产力体制机制”。 新质生产力是由技术革命性突破、生产要素创新性配置、产业深度转型升级而催生的当代先进生产力…

Vue + Vant Picker实现省市区三级联动

一、picker选择器的数据由columns属性控制,columns中有几个元素就代表该选择器有多少级,通过change方法来给对应列赋值 this.columns [{values: citys,className: "column1",defaultIndex: 0,flex: 1, //控制每列的宽度},{values: citys[0].…

[java][高级]FilterListenerAjax

Filter&Listener&Ajax 目标: 能够使用 Filter 完成登陆状态校验功能 能够使用 axios 发送 ajax 请求 熟悉 json 格式,并能使用 Fastjson 完成 java 对象和 json 串的相互转换 1,Filter 1.1 Filter概述 Filter 表示过滤器&#…

如何使用RabbitMQ和Python实现广播消息

使用 RabbitMQ 和 Python 实现广播消息的过程涉及设置一个消息队列和多个消费者,以便接收相同的消息。RabbitMQ 的 “fanout” 交换机允许你将消息广播到所有绑定的队列。以下是如何实现这一过程的详细步骤。 1、问题背景 在将系统从Morbid迁移到RabbitMQ时&#x…

java.lang.IllegalArgumentException: argument type mismatch问题排查汇总

java.lang.IllegalArgumentException: argument type mismatch 错误通常发生在方法调用时,传入的参数类型与方法签名中声明的参数类型不匹配,错误发生在堆栈跟踪中,MyBatis 反射调用方法设置 Bean 属性时。 以下是一些可能的原因和解决方法…

沉浸式学习新体验:3D虚拟展厅如何重塑教育格局!

3D虚拟展厅对于教育行业产生了深远的影响,主要体现在以下几个方面: 一、创新教学方式 3D虚拟展厅利用三维技术构建的虚拟展示空间,为教育行业带来了一种全新的教学方式。传统的教学方式往往局限于书本和课堂,而3D虚拟展厅则能够…

第107篇:国*攻防比赛中一个多层嵌套的java内存马的反混淆解密分析过程

Part1 前言 大家好,我是ABC_123。一年一度的“大型攻防比赛”已经过去2、3个月了,在此期间陆续收到了多名网友发来的内存马样本,ABC_123一直在抽时间进行分析解密工作。现在很多的内存马都进行了加密混淆,而且一个比一个复杂&…

火山引擎云服务docker 安装

安装 Docker 登录云服务器。 执行以下命令,添加 yum 源。 yum update -y yum install epel-release -y yum clean all yum list依次执行以下命令,添加Docker CE镜像源。更多操作请参考Docker CE镜像。 # 安装必要的一些系统工具 sudo yum install -y yu…

基于SpringBoot的“会员制医疗预约服务管理信息系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“会员制医疗预约服务管理信息系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 医院信息界面图…

从0开始linux(21)——文件(2)文件重定向

欢迎来到博主的专栏:从0开始linux 博主ID:代码小豪 文章目录 设备文件文件缓冲区重新认识文件描述符重定向 设备文件 在前一篇文章博主提到,当一个c/c进程运行时,会默认打开三个文件流,分别是stdin,stdout…

Claude 3.5 新功能 支持对 100 页的PDF 图像、图表和图形进行可视化分析

Claude 3.5 Sonnet发布PDF图像预览新功能,允许用户分析长度不超过100页的PDF中的视觉内容。 此功能使用户能够轻松上传文档并提取信息,特别适用于包含图表、图形和其他视觉元素的研究论文和技术文档。 视觉PDF分析:用户现在可以从包含各种视觉…

【SQL server】数据库远程连接配置

SQL server远程连接配置 1、数据库远程配置1.身份验证2. 建立入站规则3. SQLServer服务的启动 1、数据库远程配置 1.身份验证 所以在安装过程中需要注意涉及到的的身份验证中,要使用混合模式,并设置密码。2. 建立入站规则 在控制面板中的防火墙管理中…

【Vue 全家桶】5、Vuex(更新中)

目录 概念何时使用搭建vuex环境基本使用getter的使用四个map方法的使用vuex模块化命名空间 概念 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。使用 Vuex 可…

首推!AI大模型课程2024年最新版!从零基础到入行大模型算法工程师,看完这一篇就够了,学完来找我内推!

“ 技术学习无非涵盖三个方面,理论,实践和应用**”** 大模型技术爆火至今已经有两年的时间了,而且大模型技术的发展潜力也不言而喻。因此,很多人打算学习大模型,但又不知道该怎么入手,因此今天就来了解一下…

一站式搭建线上线下交友平台/全开源码交付前后端安装说明

功能亮点 灵魂匹配:基于个人喜好和兴趣,为你推荐最合适的交友对象。 真实认证:所有用户都经过严格认证,确保交友环境真实可靠。 隐私保护:强大的隐私设置,让你轻松掌控个人信息和交友动态。 互动便捷&…

基于数组实现的Huffman树和Huffman编码

一、Huffman树简介 1、定义 树的带权路径长度,就是树中所有的叶节点的权值乘上其到根节点的路径长度。 在含有n 个带权叶子结点的二叉树中,其中带权路径长度(Weighted Path Length, WPL)最小的二叉树称为哈夫曼树, 也…