持续总结中!2024年面试必问 20 道 Rocket MQ面试题(三)
上一篇地址:持续总结中!2024年面试必问 20 道 Rocket MQ面试题(二)-CSDN博客
五、什么是生产者(Producer)和消费者(Consumer)在RocketMQ中?
RocketMQ是一个高性能、高吞吐量、分布式的消息中间件,它广泛用于异步通讯、应用解耦、流量削峰和消息分发等场景。在RocketMQ中,生产者(Producer)和消费者(Consumer)是两个核心概念。
生产者(Producer)
生产者是消息的发送者,它负责将消息发送到RocketMQ的服务器上。生产者的主要功能包括:
- 消息创建:生产者创建消息,并将其封装为RocketMQ的消息格式。
- 消息发送:生产者将消息发送到指定的Topic(主题)中。Topic是RocketMQ中消息分类的一种方式。
- 负载均衡:在发送消息时,生产者会根据Broker(消息服务器)的负载情况,自动选择一个合适的Broker进行消息发送,以达到负载均衡的目的。
- 消息确认:生产者在发送消息后,会收到Broker的确认信息,以确保消息已经成功发送到服务器。
消费者(Consumer)
消费者是消息的接收者,它负责从RocketMQ的服务器上拉取并处理消息。消费者的主要功能包括:
- 消息订阅:消费者订阅一个或多个Topic,表示它对这些Topic中的消息感兴趣。
- 消息拉取:消费者从Broker拉取消息,可以是主动拉取(Pull模式)或被动接收(Push模式)。
- 消息处理:消费者接收到消息后,会进行相应的业务处理。
- 消息确认:消费者处理完消息后,需要向Broker发送确认信息,表示消息已经被成功消费。
消息队列模型
RocketMQ使用消息队列模型来管理消息。每个Topic可以包含多个Queue(队列),Queue是消息存储的单元。生产者发送消息时,消息会被分配到Topic下的某个Queue中。消费者可以从这些Queue中拉取消息进行消费。
特点
- 高吞吐量:RocketMQ支持高并发的消息发送和接收。
- 高可用性:通过Broker集群和消息副本机制,保证消息的持久化和高可用。
- 顺序消息:支持消息的顺序性,确保相同业务标识的消息按照发送顺序被消费。
- 事务消息:支持分布式事务,保证消息发送的原子性。
在实际应用中,生产者和消费者可以根据业务需求灵活配置,以满足不同的场景和性能要求。
六、请描述一下RocketMQ的消息存储机制。
RocketMQ的消息存储机制是其核心特性之一,它确保了消息的可靠性和高效性。以下是RocketMQ消息存储机制的关键组成部分和步骤:
1. 存储结构
RocketMQ的消息存储结构主要由以下几个部分构成:
- CommitLog:这是消息存储的主体,采用连续的文件存储方式,每个消息都以追加的方式写入CommitLog。这种方式可以减少磁盘寻址时间,提高写入性能。
- ConsumeQueue:也称为消息索引文件,它作为CommitLog的索引,记录了消息在CommitLog中的物理位置(偏移量)。ConsumeQueue以Topic为单位进行组织,每个Topic有多个Queue,每个Queue对应一个ConsumeQueue文件。
- IndexFile:用于快速查询消息的物理位置,通过消息的Key可以快速定位到消息所在的ConsumeQueue和CommitLog的偏移量。
- HA:高可用性机制,通过主从复制(Master-Slave Replication)来保证消息的持久化和可用性。
2. 写入流程
消息写入RocketMQ的流程如下:
- 消息发送:生产者发送消息到Broker。
- 写入CommitLog:Broker将消息追加写入到CommitLog中。
- 更新ConsumeQueue:Broker根据Topic和消息的哈希值确定消息存储的Queue,然后在对应的ConsumeQueue中记录消息在CommitLog中的偏移量。
- 消息确认:Broker将消息写入成功的状态返回给生产者。
3. 读取流程
消息读取的流程如下:
- 消息订阅:消费者订阅特定的Topic。
- 拉取消息:消费者从Broker拉取消息,可以通过Push模式或Pull模式。
- 查找ConsumeQueue:消费者通过ConsumeQueue查找消息在CommitLog中的偏移量。
- 读取CommitLog:消费者根据偏移量从CommitLog中读取消息内容。
- 消息确认:消费者处理完消息后,向Broker发送确认信息。
4. 高可用性
- 主从复制:Master节点负责处理消息的写入和读取请求,Slave节点异步复制Master节点的数据。在Master节点故障时,可以进行故障转移,由Slave节点接管服务。
- 数据同步:Slave节点通过拉取Master节点的CommitLog数据进行同步,确保数据的一致性。
5. 持久化配置
- 刷盘策略:Broker可以配置不同的刷盘策略,如同步刷盘(每次写入都同步到磁盘)和异步刷盘(批量写入到磁盘),以平衡性能和数据安全性。
- 存储空间管理:RocketMQ会自动管理存储空间,当磁盘空间不足时,可以自动删除最早的消息。
6. 容错和恢复
- 故障检测:Broker会定期检测自身的健康状况,包括磁盘空间、网络连接等。
- 故障恢复:在检测到故障时,Broker会尝试自动恢复,或者等待管理员介入。
RocketMQ的消息存储机制通过精心设计的数据结构和流程,确保了消息的高效处理、持久化存储和高可用性,满足了大规模分布式系统中对消息中间件的严格要求。
相关文章:
持续总结中!2024年面试必问 20 道 Rocket MQ面试题(三)
上一篇地址:持续总结中!2024年面试必问 20 道 Rocket MQ面试题(二)-CSDN博客 五、什么是生产者(Producer)和消费者(Consumer)在RocketMQ中? RocketMQ是一个高性能、高吞…...
Android 自定义Adapter关键函数getView性能最优使用
文章目录 1、自定义Adapter关键函数getView()标准写法2、布局文件list_item_user.xml3、解释3、示例使用4、结果5、进一步优化和扩展5.1. **优化性能:ViewHolder模式**5.2. **处理多种类型的视图**5.3. **使用RecyclerView.Adapter** 6、RecyclerView使用示例7、结果…...
Linux服务上MySQL的启动、重启和关闭
Linux服务上MySQL的启动、重启和关闭 MySQL是一种广泛使用的开源关系型数据库管理系统,常用于各种规模的应用程序中。在Linux服务器上管理MySQL服务是一个基本的运维任务。本文将详细介绍如何在Linux系统上启动、重启和关闭MySQL服务,涵盖不同Linux发行…...
ctfshow web入门 嵌入式 bash cpp pwn
kali转bash shell方法 方便我们本地 bash脚本教程 下面这个代码是bash脚本 #!/bin/bashOIFS"$IFS"IFS"," //表示逗号为字段分隔符set $QUERY_STRING //将参数传入数组Args($QUERY_STRING)IFS"$OIFS" //恢复原始IFS值if [ "$…...
【ONE·Git || 基本用法入门】
总言 主要内容:主要介绍Git中常用的指令。 PS:多人协作与企业开发模型使用,此部分内容不作博文总结。 文章目录 总言1、初识Git1.1、版本控制器1.2、git安装 2、基本操作2.1、Git本地仓库2.1.1、创建Git本地仓库&…...
【运维项目经历|021】Spark大数据分析平台建设项目
目录 项目名称 项目背景 项目目标 项目成果 我的角色与职责 我主要完成的工作内容 本次项目涉及的技术 本次项目遇到的问题与解决方法 本次项目中可能被面试官问到的问题 问题1:项目周期多久? 问题2:服务器部署架构方式及数量和配置…...
装机数台,依旧还会心念i5-12600KF的性能和性价比优势:
近几个月的时间中, 装机差不多4台电脑,由于工作需要,计划年中再增添一台。 目前市场上英特尔CPU促销非常火爆,第12代、第13代以及第14代的产品在年中有适当的优惠。 年中也是装机的旺季,各种相关配件也相对便宜一些。…...
Docker-----emqx部署
emqx通过Docker容器化部署流程 1.创建持久化挂载目录 mkdir -p /home/emqx/etc ------挂载emqx的配置文件目录 mkdir -p /home/emqx/data ------挂载emqx的存储目录 mkdir -p /home/emqx/log ------挂载emqx的日志目录 [root home]# mkdir -p /home/emqx/etc [root home]# mkd…...
三数之和-力扣
这道题在使用哈希表来做时,做的很吃力,对重复的去除很费劲。 首先是对i的去重,不能使用nums[i] nums[i] 这样的条件去判断,这会遗漏掉类似[-1, -1 , 2]这样的解其次是对j的去重, 对j的去重是为了防止类似[-4, 2, 2, …...
2024 五月份国内外CTF 散装re 部分wp
cr3CTF warmup 附件拖入ida main函数无法反汇编,仔细看,有花指令,jnz实际上必定跳转。有非常多处,可以写脚本patch程序去掉花指令,只要匹配指令,再获取跳转地址,nop掉中间的代码就行。但…...
[猫头虎分享21天微信小程序基础入门教程]第21天:小程序的社交分享与消息推送
[猫头虎分享21天微信小程序基础入门教程]第21天:小程序的社交分享与消息推送 第21天:小程序的社交分享与消息推送 📲 自我介绍 大家好,我是猫头虎,一名全栈软件工程师。今天我们继续微信小程序的学习,重…...
aop整理
一、aop基础知识 Spring AOP 详细深入讲解代码示例 二、spring/spring boot/spring cloud中出现的注解/类与概念的对应 Aspect: 标注当前MyAspect是一个切面类,–》对应切面的概念,在切面类中有用Before等注解修饰的方法作为advice,也有用…...
Sublime Text 基础教程(个人总结)
Sublime Text 是一款广受欢迎的代码编辑器,以其简洁的界面和强大的功能而著称。它支持多种编程语言,具有高效的代码编辑和管理功能。本教程将详细介绍如何使用 Sublime Text,从安装到高级使用技巧,帮助你充分利用这款工具。 目录…...
线程安全 - 笔记
1 程序a调用c.so,程序b也调用c.so c.so加载两次吗? 在这种情况下,通常 c.so 不会被加载两次。 当一个程序调用一个共享对象文件(.so)时,操作系统的动态链接器将该共享对象映射到进程的虚拟内存空间中。后续由不同程序或者同一个程序调用相同的共享对象,都不会导致共享…...
分支机构多,如何确保文件跨域传输安全可控?
随着企业全球化发展,分支机构的分布越来越广泛,跨域文件传输需求也随之增加。然而,跨域文件传输面临的数据安全和传输效率问题,使得构建一个安全、可控的文件交换系统成为迫切需求。FileLink跨网文件交换系统通过综合的技术手段和…...
长安链使用Golang编写智能合约教程(二)
长安链2.3.0的go合约虚拟机和2.3.0以下的不兼容,编译的方式也有差异,所以在ide上做了区分。 教程三会写一些,其他比较常用SDK方法的解释和使用方法 教程一:(长安链2.1.的版本的智能合约) 教程三ÿ…...
jpom linux发布前端 ruoyi
前置条件 辅助安装 安装jdk curl -fsSL https://jpom.top/docs/install.sh | bash -s Server jdkonly-moduledefault 一键安装maven 后端必备 curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 一键安装node 前端必备 curl -fsSL http…...
K8S认证|CKA题库+答案| 15. 备份还原Etcd
目录 15、 备份还原Etcd CKA v1.29.0模拟系统 下载试用 题目: 开始操作: 1)、切换集群 2)、登录master并提权 3)、备份Etcd现有数据 4)、验证备份数据快照 5)、查看节点和Pod状态 6࿰…...
软件架构设计属性之一:功能性属性浅析
文章目录 引言一、定义二、关键要素1. 需求满足2. 操作性3. 数据处理4. 业务流程支持5. 合规性 三、 设计原则1. 用户中心设计2. 模块化3. 抽象化4. 可扩展性5. 可维护性6. 设计原则的实施策略7. 设计原则的评估 四、实现策略1. 需求分析2. 功能分解3. 接口设计4. 技术选型5. 迭…...
学习Java的日子 Day48 函数,DOM
Day48 1.流程控制语句 if else for for-in(遍历数组时,跟Java是否一样) While do while break 语句用于跳出循环 continue 用于跳过循环中的一个迭代 2.函数 2.1 JavaScript 函数语法 函数就是包裹在花括号中的代码块,前面使用了关键词 function funct…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
