RocketMQ的架构是怎么样的?

今天,Java已经卷到“屎上雕花”的程度,八股文的准备如果仅仅靠背诵,很容易陷入“背了忘,忘了背”的死循环中。

所以,我们必须:结合具体的代码demo,尝试系统地掌握,才能更好的卷出一条活路。

RocketMQ 是一个分布式消息队列系统,主要用于高性能的消息传输。它的架构设计是为了提供高吞吐量、低延迟和高可用性的消息传输服务。RocketMQ 的架构包括以下几个核心组件:

1. Producer(生产者)

  • 功能:生产者负责发送消息到消息队列。消息可以是同步、异步发送,也可以是单向发送。
  • 工作流程:生产者将消息发送到 Broker,可以根据消息的类型选择不同的发送策略,如同步发送(等待 Broker 确认)、异步发送(不等待 Broker 确认)或单向发送(不关心 Broker 是否成功接收)。

2. Consumer(消费者)

  • 功能:消费者从消息队列中消费消息。RocketMQ 支持两种消费模式:推模式和拉模式。
  • 消费模式
    • 推模式:Broker 主动将消息推送给消费者。
    • 拉模式:消费者主动从 Broker 中拉取消息。
  • 消息类型
    • 集群消费:多台消费者共同消费同一个消费组中的消息,每条消息只会被其中一个消费者消费。
    • 广播消费:每台消费者都可以消费到所有消息。

3. **Broker(**消息代理)

  • 功能:Broker 是消息存储的核心组件,负责接收来自 Producer 的消息,存储消息并提供消息给 Consumer。它还负责消息的路由和队列的管理。
  • 消息存储:消息在 Broker 上存储在 CommitLog 文件中,消息队列的元数据存储在 ConsumeQueue 中。
  • 集群模式:Broker 支持集群部署,通常分为主节点(Master)和从节点(Slave),主节点负责写操作,从节点用于读操作和故障恢复。

4. NameServer(命名服务)

  • 功能:NameServer 是一个轻量级的服务发现与路由管理组件。它维护着整个集群中 Broker 的元数据信息,包括 Broker 的地址、队列信息等。
  • 工作流程:Producer 和 Consumer 通过 NameServer 发现和定位 Broker。NameServer 定期与 Broker 保持心跳检测,并更新路由信息。

5. Topic(主题)

  • 功能:Topic 是消息的逻辑分类标识符,消息是根据 Topic 进行分类的。一个 Topic 可以有多个消息队列(Message Queue),每个消息队列存储了部分消息。
  • 负载均衡:消费者在消费消息时,会从不同的消息队列中拉取消息,从而实现负载均衡。

6. **Message Queue(消息队列)

  • 功能:每个 Topic 包含多个消息队列,用于在 Broker 内部存储消息。消费者从消息队列中拉取消息进行消费。
  • 特点:消息队列在 Topic 中是独立存在的,消费者可以并行消费不同队列中的消息,提高消费吞吐量。

7. 消息存储机制

  • CommitLog:所有的消息都会按照顺序写入 CommitLog 文件。
  • ConsumeQueue:ConsumeQueue 是 CommitLog 的索引文件,用于加速消息消费。

8. 事务消息

  • 功能RocketMQ 支持分布式事务,允许生产者在发送事务消息时,通过确认或回滚操作来决定事务消息是否提交。

RocketMQ 的架构图(简化版)

  +------------------+            +------------------+
  |     Producer     |            |     Consumer     |
  +--------+---------+            +--------+---------+
           |                               |
           |                               |
  +--------v---------+            +--------v---------+
  |     NameServer   |            |    NameServer    |
  +--------+---------+            +--------+---------+
           |                               |
           |                               |
  +--------v---------+            +--------v---------+
  |     Broker       | <------>   |     Broker       |
  +------------------+            +------------------+
  |   CommitLog      |            |   CommitLog      |
  |   ConsumeQueue   |            |   ConsumeQueue   |
  +------------------+            +------------------+

总结:

RocketMQ 的架构设计充分考虑了分布式系统的需求,能够很好地支持高并发和高可用性。Producer 和 Consumer 通过 NameServer 进行服务发现和路由管理,Broker 负责消息的存储和转发,而 Topic 和 Message Queue 则实现了消息的分类和分片。

Coding不易,棒棒,加油!

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值