MST

星途 面试题库

面试题:消息队列之RocketMQ架构基础

请阐述RocketMQ的主要组件,如NameServer、Broker、Producer和Consumer的功能及它们之间是如何协同工作的?
10.9万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

NameServer

  • 功能:NameServer是一个轻量级的元数据服务,主要负责存储和管理Broker的路由信息。它不进行数据的持久化,当NameServer重启后,会自动从Broker重新收集最新的路由信息。NameServer相互之间无状态且独立,彼此之间不进行数据同步。
  • 作用:为Producer和Consumer提供Broker的地址信息,使得它们能够找到对应的Broker进行消息的发送和接收。

Broker

  • 功能:Broker是RocketMQ的核心组件,负责存储消息、处理消息的读写请求。它会将消息持久化到磁盘,以确保消息的可靠性。同时,Broker还负责与NameServer进行通信,上报自己的状态和路由信息;与Producer和Consumer进行交互,处理消息的生产和消费请求。
  • 分类:包括Master Broker和Slave Broker,Master负责读写操作,Slave从Master同步数据,用于数据备份和提高读性能。

Producer

  • 功能:消息生产者,负责生成并发送消息到Broker。Producer在发送消息时,会先从NameServer获取Broker的路由信息,然后根据负载均衡策略选择一个Broker进行消息发送。支持多种发送方式,如同步发送、异步发送和单向发送。
  • 发送流程
    1. Producer启动时,向NameServer注册自己,并获取所有Broker的路由信息。
    2. 根据负载均衡算法(如轮询等)选择一个Broker的Master节点。
    3. 将消息发送到选中的Broker Master,Broker Master持久化消息后返回成功响应。

Consumer

  • 功能:消息消费者,负责从Broker拉取消息并进行处理。Consumer同样需要从NameServer获取Broker的路由信息,然后根据负载均衡策略分配消费任务。支持两种消费模式:集群消费和广播消费。
  • 消费流程
    1. Consumer启动时,向NameServer注册自己,并获取所有Broker的路由信息。
    2. 根据负载均衡算法在多个Consumer实例间分配消费任务,确定每个Consumer负责消费哪些队列。
    3. 从对应的Broker队列中拉取消息并处理,处理完成后向Broker发送消费确认。

协同工作流程

  1. Broker注册:Broker启动时,向所有的NameServer实例注册自己的信息,包括IP地址、端口、Topic配置等。NameServer将这些信息保存,形成路由表。
  2. Producer发送消息:Producer启动后,从NameServer获取路由信息,根据负载均衡算法选择一个Broker的Master节点发送消息。Broker接收到消息后,进行持久化操作,并返回成功响应给Producer。
  3. Consumer消费消息:Consumer启动后,从NameServer获取路由信息,通过负载均衡算法在多个Consumer实例间分配消费任务。Consumer从分配到的Broker队列中拉取消息进行处理,处理完成后向Broker发送消费确认。如果Consumer在一定时间内未发送消费确认,Broker会认为消息消费失败,可能会重新投递该消息。