首页 > 其他分享 >队列mq 相关

队列mq 相关

时间:2024-08-11 22:39:39浏览次数:4  
标签:存储 rocket 队列 写入 mq 消息 磁盘 相关

1. 队列相关

什么是消息队列

消息队列是一种异步的通信方式, 用于在分布式系统中管理消息传递。
采用了生产者消费者模式,生产者将消息发送到队列,消费者负责从队列接收消息

队列的好处

使用队列的核心好处主要有3个,分别是 解耦、异步和削峰

2. rocket 相关

2.1 rocket mq 如何做到消息不丢失

1. 刷盘机制 
rocketMq 中的消息分为内存消息和磁盘消息,内存消息在broker 内存中进行读写,磁盘消息则保存在磁盘上
rocket 支持同步刷盘和异步刷盘两种,通过刷盘机制可以确保broker 宕机时数据不会丢失. 
在同步刷盘模式下,消息写入磁盘会等待磁盘的写入完成才返回写入成功的响应
在异步刷盘模式下,消息写入磁盘后立即返回写入成功的响应,但是不等待磁盘写入完成
2. ACK机制
在 rocketMq 中, producer 发送消息后,broker会返回ACK确认信号,表示消息已经发送成功,如果broker 没有收到确认信号,就会尝试重新发送该消息,直到消息被确认为止
rockerMq 采用主动复制机制,每个消息队列都有一个主节点和多个从节点,主节点负责消息的写入和读取,从节点负责备份数据,当主节点宕机时,从节点会自动接管主节点的工组,确保消息不会丢失
3. 消息存储机制
rocketMq 默认使用双写模式来存储消息,即将消息同时写入内存和磁盘中,然后再将内存中的消息异步刷盘到磁盘中,这种方式可以保证消息的可靠性,即时系统宕机,也能够尽可能的保证消息不会丢失
除此之外,rocketmq 还提供了多种机制来保证消息不丢失,如事务消息,延迟消息,顺序消息等
为了确保消息的可靠性,rocketMq 的发送消息的速度可能会受到一定的限制,需要在消息的可靠性和西能之间进行权衡

2.2 rocket mq 消息如何存储

1. rocket 的消息存储主要涉及了四个部分, 消息存储文件,消息索引,文件组织管理以及数据结构
2. 首先是消息存储文件, rocket 主要使用commitLog 文件来存储实际的消息数据, commitLog 是顺序写的文件,可大大提高写入性能
3. 为了快速查找消息,rocketmq 使用了consumerQueue 和 indexFile 两种索引文件, consumerQueue 是基于Topic和Queue 纬度的索引, 存储了消息在commitLog 中的偏移量等信息, indexFile 则是基于消息key的索引,方便根据key 来快速查找消息
4. rocketMq 采用固定大小的文件存储方式,当一个文件写满后,会创建新的文件继续写入,同时会有后台线程定期清理过期或不在使用的文件,以释放存储空间
5. 在存储消息时,会使用特定的数据结构来优化存储和读取效率,例如采用字节数组来存储消息内容

当一条消息发送到rocketMq 时,它首先被顺序写入到commitLog 文件中,同时相关的索引信息会被更新到对应的ConsumerQueue 和可能的indexFile 中,
当消费者需要获取消息时,先通过consumerQueue 快速定位消息在commitLog 中的位置,然后从commitLog 中读取具体的消息内容, 通过这种方式,rocketMq 能够保证在高性能写入的同时,提供高效的消息查询和消费功能

2.3 rocket Mq 如何保证消息顺序

1. 生产者将要保证顺序的消息发送到同一个messageQueue 中,通过特定的路由策略,会将具有顺序关联的消息路由到同一个队列
2. messageQueue 中的消息,是按照发送的先后顺序进行存储的
3. 消费者在消费指定的messageQueue时,采用单线程顺序消费的方式,确保同一个messageQueue 中的消息按照发送顺序被处理

2.4 消息大量积压怎么解决

1. 当消息出现大量积压时,首先需要检查消费者,确认消费者是否正常启动运行,查看消费者日志,是否报错或者异常,消费逻辑上是否存在缓慢、死循环或者其他逻辑问题
2. 对比正常情况下的消费速度和当前的消费速度,是否有明显的下降,检查消费者的配置,例如线程数、批量消费大小是否合理
3. 检查生产者的发送速度是否异常增加,查看生产者的日志是否有发送失败或者重试记录
4. 监控 Broker 资源,查看所在服务器的cpu、内存、网络、磁盘IO等资源的使用情况,是否存在资源瓶颈,检查broker 的配置,如内存,存储等是否满足业务需求
5. 确定哪些队列中的消息出现了积压,分析这些队列对应的主题和业务,是否存在异常的流量模式
6. 

3. rocket 的使用

3.1 rocket 生产者

1. 创建一个common 类, 引入rocket 相关依赖(rocketMq-springboot),
2. 创建 MqProduceService 类, 主要用于统一发送消息的格式, 不需要关注mqTemplate
3. 针对需要使用mq 的项目,引入 common-mq 类, 同时配置其所需信息, 如 name-server、producer.group 等
4. 针对需要发送的消息,直接调用mqProduceService 进行消息发送

3.2 rocket消费者

1. 

标签:存储,rocket,队列,写入,mq,消息,磁盘,相关
From: https://www.cnblogs.com/antordragon/p/18353860

相关文章

  • 分享安装Windows11系统相关的经验
    文章目录1.概述2.安装过程3.经验分享本章回中我们准备向大家介绍如何安装Window11操作系统同时分享一些相关的安装经验。1.概述有看官说都什么年代了还介绍如何安装操作系统,不过介绍安装操作系统的方法不是我的重点,我的重点是分享相关的安装经验,帮助大......
  • 栈和队列part01
    今天学习了栈和队列的第一部分。基础知识用栈模拟队列(双栈)用队列模拟栈(一个队列,但是需要重复将队头元素写到队尾)栈的基本应用(括号匹配、删除重复项、逆波兰表达式)1.基础知识栈和队列是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是我们可以控......
  • 栈和队列part03
    今天学习了队列的常见题型:滑动窗口最大值,先进先出不难想到队列,最大值可以考虑优先队列,但是此题还是典型的单调队列(需要自己实现)前k个高频元素,维护最大值常用优先队列,注意选的最小堆7.239滑动窗口最大值(队列)题目:给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左......
  • 【1.0版】【MYSQL安全】导入导出相关操作
    主题导入导出相关操作一、load_file()二、intooutfile一、load_file()load_file(file_name):读取文件并返回该文件的内容作为一个字符串使用条件:A、必须有权限读取并且文件必须完全可读and(selectcount()frommysql.user)>0#如果结果返回正常,说明具有读写......
  • C++提高编程—4、STL常用容器—list(链表)和queue(队列)
    7list容器 7.1基本概念 7.2 构造函数 7.3 赋值和交换 7.4 大小操作  使用10000来填充。7.5 插入与删除 7.6 数据存取 7.7 反转与排序  8set/multset容器 7.1基本概念7.2 构造和赋值7.3大小和交换7.4 插入与删除7.5 查......
  • RabbitMQ Web管理界面简介
    OverviewTotalsQueuedmessagesReadyNumberofmessagesthatareavaliabletobedeliverednow.待消费的消息数量一般来说,如果队列中ready状态的消息数量比较多,则说明消费者的处理能力可能不足,可以考虑适当增加消费者UnackedNumberofmessagesforwhichthe......
  • mysql 相关
    1.mysql索引1.1mysql为什么使用b+树做索引mysql的索引主要有hash索引以及B+树索引对于索引,一般就是为了加快数据访问而存在的,所以索引要求的就是效率而mysql索引数据一般是存储在磁盘的,磁盘与内存的交互存在IO,而IO是硬件问题,没法解决,剩下的能解决的也就是IO次数以及......
  • spring 相关
    1.对spring的理解spring是一个广泛应用于企业级java开发的强大框架,为开发复杂的应用程序提供了全面而高效的解决方案1.spring的核心是控制反转+依赖注入,即IOC和DI,这意味着对象的创建和管理不再由开发者直接负责,而是可以交由Spring容器来处理,通过配置文件或者......
  • makefile相关
    1.makefile示例以及解析:#定义编译器和编译选项CC=gccCFLAGS=-Wall-Wextra-pedantic-std=c99LDFLAGS=-lm#定义项目目录和文件SRCDIR=srcOBJDIR=objBINDIR=binINCDIR=includeLIBDIR=lib#查找源文件SRCS=$(wildcard$(SRCDIR)/*.c)OBJS=$(SRCS:$(SRCDIR)/%.c......
  • 499 道 Java 面试题 (附答案):JVM+ 分布式 + 算法 + 锁 +MQ
    Spring如何管理事务的。Spring怎么配置事务(具体说出一些关键的xml元素)。说说你对Spring的理解,非单例注入的原理?它的生命周期?循环注入的原理,aop的实现原理,说说aop中的几个术语,它们是怎么相互工作的。Springmvc中DispatcherServlet初始化过程。netty......