RocketMQ的集群架构是怎样的?
大家好,我是锋哥。今天分享关于【RocketMQ的集群架构是怎样的?】面试题。希望对大家有帮助;

RocketMQ的集群架构是怎样的?
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
RocketMQ 是阿里巴巴开源的分布式消息中间件,广泛用于处理高吞吐量、高可用的消息队列服务。它的集群架构设计非常注重高可用性、可扩展性和高效性。以下是 RocketMQ 的集群架构主要组件和工作原理:
1. 集群组成
RocketMQ 的集群架构主要由以下几部分组成:
-
NameServer:分布式的注册中心,类似于服务发现的功能。它用于存储和维护消息队列的元数据信息(如Broker的地址、Topic和Queue的映射关系等),并且提供消息路由功能。客户端在启动时会从 NameServer 获取可用的 Broker 地址,然后进行连接和消息发送。
-
Broker:消息存储的核心组件,负责实际的消息存储和处理。Broker 存储着消息、处理消费者请求、将消息发送给消费者等。一个 RocketMQ 集群通常包含多个 Broker 实例,以保证高可用和高吞吐量。
-
Producer:消息生产者,负责将消息发送到 RocketMQ 集群中。Producer 会向 NameServer 查询 Broker 地址,然后将消息发送到相应的 Broker。
-
Consumer:消息消费者,负责从 Broker 拉取消息并处理。Consumer 可以通过订阅指定的 Topic 获取消息,也可以是集群模式(多个 Consumer 实例)或者广播模式(一个 Consumer 实例消费所有消息)。
-
Admin:用于管理和监控 RocketMQ 集群的工具。管理员可以通过 Admin 操作对集群进行控制,如创建、删除 Topic,查看消息状态等。
2. Broker 的架构
Broker 是 RocketMQ 的核心部分,它负责消息的存储、分发和消费。每个 Broker 由以下几个主要组成部分:
-
消息存储(Message Storage):Broker 将消息存储到磁盘中,每个 Topic 会划分成多个队列(Queue),每个队列内存储着该队列对应的消息。RocketMQ 默认使用 CommitLog 文件来存储消息,并且每个 Topic 可以由多个消息队列组成。
-
消息调度(Message Dispatching):Broker 负责将生产者发送的消息调度到对应的队列中,同时将消息分发给消费该队列的 Consumer。
-
消费进度(Consumer Offset):Broker 会维护消费者的消费进度。当一个 Consumer 拉取消息后,Broker 会记录该消费者的消费偏移量(Offset),并且当该 Consumer 下次消费时会从上次的 Offset 开始拉取消息。
-
集群模式和主从架构:RocketMQ 支持 Broker 集群模式,可以有多个 Broker 来处理不同的 Topic 和队列。为了保证高可用性,RocketMQ 中的 Broker 支持主从复制架构,每个 Broker 可以有一个主节点和多个从节点。主节点负责消息的写入和同步,而从节点负责消息的读取以及对主节点的消息同步。这样可以在主节点故障时,由从节点接管,保证系统的高可用。
3. 消息存储和高可用机制
RocketMQ 提供了强大的消息存储和高可用机制:
-
CommitLog 和 ConsumeQueue:RocketMQ 使用两个核心文件来存储消息和消费进度:
- CommitLog:记录所有的消息。每条消息都会被追加写入到 CommitLog 文件中。
- ConsumeQueue:记录消息的消费进度和索引信息,Consumer 会根据 ConsumeQueue 中的索引来快速定位消息的位置。
-
主从复制:每个 Broker 会有一个主节点和多个从节点(也称为 Slave)。主节点处理写入请求,而从节点从主节点同步消息。当主节点故障时,从节点会自动升级为主节点,保证消息的高可用性。
-
消息同步与异步:RocketMQ 支持同步和异步消息同步机制。在同步模式下,消息写入主节点后会等待从节点同步完成后再返回给生产者,保证消息的可靠性;而在异步模式下,消息写入主节点后立即返回,性能较高,但会有一定的消息丢失风险。
4. 集群中的高可用与负载均衡
RocketMQ 采用了分布式架构中的一些高可用设计:
-
多 Broker 集群:一个 RocketMQ 集群通常包含多个 Broker,每个 Broker 负责处理不同的队列。通过多个 Broker 分摊负载,提升吞吐量和并发处理能力。
-
负载均衡:Producer 会向多个 Broker 发送消息,Broker 之间会进行负载均衡,确保每个 Broker 的负载不会过高,同时保持消息的顺序性和一致性。
-
容错和故障恢复:当某个 Broker 或其主节点出现故障时,RocketMQ 会自动将故障的 Broker 替换为健康的从节点,保证系统持续可用。
5. 消息顺序保证
RocketMQ 支持消息的顺序保证,但有一些限制:
- 顺序消息:RocketMQ 可以保证单个队列内的消息顺序,即同一个消息队列中的消息按照生产者发送的顺序消费。
- 分区顺序:如果 Topic 被划分为多个队列,RocketMQ 会在生产者发送消息时,将不同的消息分配到不同的队列上。这些消息在不同队列内的顺序可能会丢失,但同一队列内的顺序会被保证。
6. 消息路由
RocketMQ 使用了 NameServer 进行消息路由的管理。Producer 和 Consumer 启动时会向 NameServer 请求 Broker 列表,NameServer 会根据负载和策略选择合适的 Broker 来进行消息发送或消费。
7. 集群扩展性
RocketMQ 支持横向扩展,可以根据实际需求添加更多的 Broker 或者增加 Topic 和队列的数量,以提高消息的吞吐量和集群的并发能力。
总结
RocketMQ 的集群架构通过分布式设计、高可用的主从架构、负载均衡、消息存储优化等机制,能够支持高并发、高吞吐量的消息服务。它的灵活性和扩展性使得 RocketMQ 可以适应不同规模和业务需求的消息传递场景。在实际使用中,通过合适的配置和集群管理,RocketMQ 可以很好地处理大规模的分布式消息传递任务。
相关文章:
RocketMQ的集群架构是怎样的?
大家好,我是锋哥。今天分享关于【RocketMQ的集群架构是怎样的?】面试题。希望对大家有帮助; RocketMQ的集群架构是怎样的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RocketMQ 是阿里巴巴开源的分布式消息中间件,广泛用于处…...
VS2022+QT6.7 窗口置灰(遮罩)
本文章使用QWidget来使窗口置灰,使用按钮控制置灰功能的开启和关闭,同时被置灰的控件自动禁用交互功能。 connect(ui.pushButton_open, &QPushButton::clicked, this, []() { //创建无边框窗口,大小是父的大小QWidget* parentWidget new QWidget…...
如何通过HTTP API插入或更新Doc
本文介绍如何通过HTTP API向Collection中插入或更新Doc。 说明 若调用本接口时Doc Id已存在,则等同于更新Doc;Doc Id不存在,则等同于插入Doc。 若调用本接口时不指定Doc Id,则等同于插入Doc,DashVector会自动生成Doc …...
C++ STM32 F4xx USART LL库 DMA + IDLE ISR 驱动裸机 +FreeRTOS 任务通知
写的一般,大佬可以帮我看看 头文件 /********************************************************************************* file : usart_driver.hpp* brief : usart_driver program head**************************************************…...
RK3588在Android13/14如何查看GPU,NPU,DDR,RGA数据
由于Android13上selinux的权限管控加强,原来android12的方法已经无法获取到性能相关数据了,故单独介绍Android13上的性能数据获取 首先需要保障能过获取到root权限,adb root能够生效,adb shell进入shell命令行 mount -t debugfs…...
sentinel学习笔记6-限流降级(上)
本文属于sentinel学习笔记系列。网上看到吴就业老师的专栏,写的好值得推荐,我整理的有所删减,推荐看原文。 https://blog.csdn.net/baidu_28523317/category_10400605.html sentinel 实现限流降级、熔断降级、黑白名单限流降级、系统自适应…...
【Rust自学】6.4. 简单的控制流-if let
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 6.4.1. 什么是if let if let语法允许将if和let组合成一种不太冗长的方式来处理与一种模式匹配的值,同时忽略其余模式。 可以…...
【HarmonyOS】鸿蒙将资源文件夹Resource-RawFile下的文件存放到沙箱目录下
【HarmonyOS】鸿蒙将资源文件夹Resource-RawFile下的文件存放到沙箱目录下 一、问题背景 应用开发中,我们经常会遇到一些文件原先是放在资源文件夹 rawfile下,但是逻辑处理时,需要转移到本地沙箱才能操作。这种情况下,就需要将将…...
Vue项目中env文件的作用和配置
在实际项目的开发中,我们一般会经历项目的开发阶段、测试阶段和最终上线阶段,每一个阶段对于项目代码的要求可能都不尽相同,那么我们如何能够游刃有余的在不同阶段下使我们的项目呈现不同的效果,使用不同的功能呢?这里…...
在 Vue3 项目中实现计时器组件的使用(Vite+Vue3+Node+npm+Element-plus,附测试代码)
一、概述 记录时间 [2024-12-26] 本文讲述如何在 Vue3 项目中使用计时器组件。具体包括开发环境的配置,ViteVue 项目的创建,Element Plus 插件的使用,以及计时器组件的创建和使用。 想要直接实现计时器组件,查看文章的第四部分。…...
机器人C++开源库The Robotics Library (RL)使用手册(三)
进入VS工程,我们先看看这些功能函数及其依赖库的分布关系: rl命名空间下,主要有八大模块。 搞定VS后将逐个拆解。 1、编译运行 根据报错提示,配置相应错误的库(根据每个人安装位置不同而不同,我的路径如下:) 编译所有,Release版本耗时大约10分钟。 以rlPlan运动…...
Photoshop启动错误:找不到MSVCP140.dll的多步骤解决指南
在使用Adobe Photoshop(简称PS)进行创意设计或图像编辑时,有时会遇到软件启动报错的情况,其中“找不到MSVCP140.dll,无法继续执行代码”是一个常见的错误提示。这个错误通常意味着你的系统缺少了Microsoft Visual C Re…...
mac中idea菜单工具栏没有git图标了
1.右击菜单工具栏 2.选中VCS,点击添加 3.搜索你要的工具,选中点击确定就添加了 4.回到上面一个界面,选中你要放到工具栏的工具,点击应用就好了 5.修改图标,快捷键或者右击选中编辑图标 6.选择你要的图标就好了...
学习threejs,PerspectiveCamera透视相机和OrthographicCamera正交相机对比
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.PerspectiveCamera透…...
C#数学相关开发性能优化方法
本文Github地址:CSharp-MathOptimization.md 华为公司的C语言编程规范在开头就强调了: 一般情况下,代码的可阅读性高于性能,只有确定性能是瓶颈时,才应该主动优化。 本文讲述的方法没有经过大项目和大公司的检验&…...
【前沿 热点 顶会】AAAI 2025中与目标检测有关的论文
CP-DETR: Concept Prompt Guide DETR Toward Stronger Universal Object Detection(AAAI 2025) 最近关于通用物体检测的研究旨在将语言引入最先进的闭集检测器,然后通过构建大规模(文本区域)数据集进行训练࿰…...
APP投放的归因框架设计
一、归因相关概念回顾 在广告归因简介中我们介绍常见的归因模型和归因方法,我们先来回顾一下: 1. 背景 2. 设备标识 3. 归因模型 归因模型的多样性意味着每种模型都有其独特的优势和局限。关键在于选择一个与您的业务场景相匹配的模型,并且…...
职业生涯记录-1
机缘 普通人改命,要学会向上社交,能自然融入的圈子,多数是往下社交,没有多少价值,想要获取更多资源,但是有钱人只跟有钱人交朋友,不会带我们普通人玩,又错了,有钱人身边最不缺的就是有钱人,他们缺的是对他们有利用价值的朋友,往上社交的关键,你必须是个对他有利用价…...
江苏捷科云:可视化平台助力制造企业智能化管理
公司简介 江苏捷科云信息科技有限公司(以下简称“捷科”)是一家专注于云平台、云储存、云管理等产品领域的创新型企业,集研发、生产和销售于一体,致力于在网络技术领域打造尖端品牌。在推动制造业企业数字化转型的进程中…...
【ES6复习笔记】Promise对象详解(12)
1. 什么是 Promise? Promise 是 JavaScript 中处理异步操作的一种机制,它可以让异步操作更加容易管理和控制。Promise 对象代表一个异步操作的最终完成或失败,并提供了一种方式来处理操作的结果。 2. Promise 的基本语法 Promise 对象有三…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
