持续总结中!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…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...