news 2026/7/13 4:03:47

RocketMQ架构原理八股面试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RocketMQ架构原理八股面试

架构原理

  1. RocketMQ 整体架构流程简述(生产者→NameServer→Broker→消费者)

每个Broker在创建好后会向所有NameServer汇报自己的Topic路由信息即 Broker地址、Topic配置、都写队列路由信息,每个NameServer都会以Topic为分类整理Broker汇报的路由信息。

客户端(Productor/Consumer)会定时从NameServer获取路由信息来更新本地Topic下的Broker信息;如果某一个Broker访问失败,则会重新查询NameServer更新路由信息。以上整个链路搭建完成。

Productor根据路由Topic信息选择一个WriteMessageQueue,将消息发送到对应Broker,Broker收到消息后写入CommitLog,再根据CommitLog构键ConsumerQueue和IndexFile,完成持久化。

ConsumerGroup下的每个Consumer会根据Rebalance分配到若干个ReadMessageQueue,从Broker拉取消息进行消费。消费成功后,向Broker提交消费结构更新消费点位,确认该消息为正常消费。若消费失败则会重试,每一次重试的间隔时间都会更长,直到16次重试机会全部耗尽,则会加入死信队列(DLQ),待人工处理后补偿消费。

  1. NameServer 为什么设计成无状态?

RocketMQ的NameServer采用无状态而非Raft、Paxos、Zookeeper那样的主从选举,是因为NameServer只是缓存Broker的信息,而Broker真正的信息在他们各自的手中,所以RocketMQ没有采用中心化思想,要求所有NameServer都要确保Broker数据的强一致性,而是分为主动和被动两种方案尽可能维护NameServer中缓存的Broker信息的正确性。

主动:Broker每间隔30秒(默认)向所有NameServer发送 路由注册 + 心跳请求 来更新NameServer中缓存的Broker信息。而客户端(Productor/Consumer)并不是一直使用首次从某一NameServer查询到的Broker信息一直使用,默认10秒会清空客户端的Broker缓存信息,重新轮询查询其他NameServer来更新客户端的Broker缓存信息。

被动:Productor/Consumer在与NameServer中查询到的Broker进行连接发送消息时,若是出现了失败,Productor/Consumer还是会轮询其他NameServer查询Broker信息更新到本地客户端,至于先前缓存不一致的NameServer则会由 30秒间隔的 路由注册 + 心跳请求来更新。

RocketMQ权衡了引入Raft、Paxos、Zookeeper带来的复杂度 和 NameServer最终一致性的设计会造成的短时间内Broker使用不均衡 ,最后仍然决定使用后者,认为短时间内的Broker使用不均衡在后续NamerServer更新完缓存的Broker信息,最终仍然可以较为均衡的使用所有Broker,而额外算法的引入则会大大增加维护和开发难度。

  1. Broker 如何同步 Topic 路由信息?

RokcetMQ不会同步路由消息,而是每个Broker维护自身的Topic配置,并在启动及运行期间通过registerBroker定期向所有NameServer上报自己的Topic配置信息,再由各个NameServer统一汇总整理每个Topic下的Broker。后续客户端即可定时从NameServer查询指定Topic路由消息并且缓存在客户端本地。

  1. RocketMQ 队列机制,Topic 默认多少队列?读写队列区别?

Productor发布的消息并不是直接发送到Topic下。而是Topic下的MessageQueue,一个Topic默认创建4个MessageQueue,分别为4个读队列和4个写队列,即一个队列分别有读写功能,而非8个队列,4个读队列和4个写队列。Productor发布消息到指定Topic->Broker下的写队列,Consumer读取指定Topic->Broker下的读队列消息进行消费。

若指定创建8个写队列4个读队列,则会创建8个队列,着8个队列全都有写功能,但只有其中4个有读功能。即 QueueNums=max(readQueueNums.writeQueueNums).

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 4:01:58

select、poll、epoll 到底有什么区别?一文讲透 I/O 多路复用 _

同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。此时需要调用者询问处理结果 异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果&am…

作者头像 李华
网站建设 2026/7/13 4:01:12

Python遗传算法实战:N皇后问题从零实现与调优

1. 这不是教科书,而是一次手把手带你跑通遗传算法实战的现场复盘你点开这篇文章,大概率不是为了背诵“遗传算法是模拟生物进化过程的优化方法”这种定义。你真正想搞明白的是:当代码跑起来之后,那一堆population、fitness、mutati…

作者头像 李华
网站建设 2026/7/13 3:56:32

2026最新7款高性价比AI编程助手企业选型实测

这次对比的起因很偶然:5 款 AI 编程工具都在同一周发布了大版本更新,我趁机做了一次同条件下的横评。我去年7月刚毕业进公司做后端开发,手里负责的是代号为「橙果」的生鲜电商小程序后端迭代项目,当时团队要赶618大促的功能上线&a…

作者头像 李华
网站建设 2026/7/13 3:54:59

2026最新猫眼协议抢票-破军网络

mtgsig 1.2 完整逆向拆解(美团小程序 H5guard 加密)一、先明确核心结论你现在用的 9521 端口服务 官方封装好的黑盒 RPC 加密服务,本质是内置了完整逆向还原后的 H5guard 1.2 算法,输入请求参数直接输出可用 mtgsig,不…

作者头像 李华
网站建设 2026/7/13 3:53:22

网络安全主要是做什么

网络安全主要是做什么 数据保护 确保数据访问安全。只有经过授权的用户才能访问和使用数据。 保护数据机密性。防止数据泄露。 维护数据完整性。确保数据不被篡改或损坏。 系统防护 保护企业的网络、系统、设备和其他敏感信息免受攻击。 对服务器、网络设备和安全产品进行维护…

作者头像 李华
网站建设 2026/7/13 3:51:17

DeepSeek注释生成合规性红线预警:GDPR/等保2.0/信创要求下,这5类敏感信息必须拦截——审计通过率提升至99.6%

更多请点击: https://intelliparadigm.com 第一章:DeepSeek注释生成合规性红线预警总览 DeepSeek系列大模型在代码注释自动生成场景中展现出强大能力,但其输出内容若未经严格合规校验,可能触碰法律、安全与工程治理的多重红线。本…

作者头像 李华