持续总结中!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…...
3分钟快速上手:ESP32 Arduino开发环境完整配置指南
3分钟快速上手:ESP32 Arduino开发环境完整配置指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 想在熟悉的Arduino环境中开发强大的ESP32物联网项目吗&…...
基于AW9523与CircuitPython的互动LED灯带硬件开发实践
1. 项目概述:一个会“动”的LED灯带如果你玩过嵌入式开发,尤其是用Adafruit的板子做点小玩意儿,那你肯定对“快速原型”这个词不陌生。CircuitPython的出现,让写代码控制硬件变得像在电脑上写脚本一样简单。但有时候,板…...
FTDI Friend:从USB转串口到AVR编程的嵌入式开发利器
1. 项目概述:为什么你需要一个FTDI Friend?在嵌入式开发和单片机玩家里,串口通信就像空气和水一样基础且不可或缺。无论是给Arduino上传代码,还是让树莓派和传感器模块“说上话”,亦或是调试一个自己焊的STM32最小系统…...
Harness 中的请求标识染色:端到端追踪
1. 标题选项(核心关键词:Harness、请求标识染色、端到端追踪、可观测性、CI/CD) 「Harness 可观测性实战:请求标识染色实现全链路端到端追踪」 「从0到1搞定Harness请求染色:让微服务调用链路+变更链路无所遁形」 「告别排查黑洞:Harness请求标识染色的端到端追踪落地指南…...
【负荷预测】基于LSTM-KAN的负荷预测研究(Python代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
终极指南:5步彻底解决Gopeed下载管理器403 Forbidden错误
终极指南:5步彻底解决Gopeed下载管理器403 Forbidden错误 【免费下载链接】gopeed A fast, modern download manager for HTTP, BitTorrent, Magnet, and ed2k. Cross-platform, built with Golang and Flutter. 项目地址: https://gitcode.com/GitHub_Trending/…...
在STM32F103上用FreeRTOS模拟I2C,为什么我劝你放弃硬件I2C?
为什么在STM32F103上使用FreeRTOS时,模拟I2C比硬件I2C更靠谱? 如果你正在使用STM32F103开发项目,并且需要在FreeRTOS环境下实现I2C通信,那么这篇文章可能会改变你的技术选型决策。很多开发者初次接触STM32时,都会优先考…...
终极指南:如何用UI-TARS桌面版实现零代码智能桌面自动化
终极指南:如何用UI-TARS桌面版实现零代码智能桌面自动化 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-desktop …...
暗黑3终极按键助手D3KeyHelper:图形化配置解放你的双手
暗黑3终极按键助手D3KeyHelper:图形化配置解放你的双手 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑破坏神3中繁琐的技能按…...
从换电博弈到芯片浪潮:新能源汽车与半导体产业交叉机遇解析
1. 行业动态深度解析:从换电博弈到芯片浪潮最近行业里几件事儿挺有意思,放在一起看,能品出不少门道。一边是造车新势力在补能路线上开始“左右互搏”,小鹏汽车悄悄注册了一家经营范围包含“新能源汽车换电设施销售”的子公司&…...
