RocketMQ教程(五):RocketMQ的工作原理2

工作原理

RocketMQ 是一个高性能、高吞吐量的分布式消息和流计算平台,它基于发布-订阅模式工作。其核心设计理念是确保消息传递的高效性、稳定性和可扩展性。RocketMQ 的工作原理主要可以分为以下几个部分:

 

1. 消息流程

  • 消息发布: Producer 首先向 NameServer 查询目标 Topic 所在的 Broker 地址,然后将消息发送到这个 Broker。

  • 消息存储: Broker 接收到消息后,将消息存储在磁盘或内存中。为了提高效率,Broker 会批量将消息存储到磁盘。

  • 消息订阅: Consumer 启动时,向 NameServer 查询并订阅其感兴趣的 Topic,NameServer 返回对应的 Broker 地址。然后,Consumer 直接和 Broker 建立连接,进行消息拉取或等待 Broker 推送消息。

2. 高可用性设计

  • 主从同步: 为了保证数据的可靠性和高可用性,Broker 可以配置为主从模式。在此模式下,主Broker负责处理读写请求,同时将数据同步到从Broker,以保证在主Broker宕机时,从Broker可以接管服务。

  • 负载均衡: RocketMQ 支持集群模式,可以通过增加 Broker 实例来水平扩展系统的处理能力。同时,它在 Producer 和 Consumer 端都实现了负载均衡,确保消息的均匀分布和消费。

3. 消息确认和重试机制

  • 消息确认: 消费者处理消息后,需要向Broker发送确认信息。如果Broker在规定时间内没有收到确认,它会重新投递该消息。

  • 重试机制: 当消息消费失败时,RocketMQ 支持自动重试,增强了消息处理的可靠性。

RocketMQ 通过这些设计理念和工作原理,不仅保证了消息传输的高效与可靠,还可以根据业务需求灵活扩展,满足不同规模应用的需求。

消息消费

消费者从Broker中获取消息的方式分为两种:

  • pull 拉取方式
  • push 推送方式

消费者组对于消息消费的模式又分为两种:

  • 集群消费Clustering
  • 广播消费Broadcasting

拉取式消费:

Consumer主动从Broker中拉取消息,主动权由Consumer控制。一旦获取了批量消息,就会启动消费过程。不过,该方式的实时性较弱,即Broker中有了新的消息时消费者并不能及时发现并消费。由于拉取时间间隔是由用户指定的,所以在设置该间隔时需要注意平稳:间隔太短,空请求比例会增加;间隔太长,消息的实时性太差。

推送式消费:

该模式下Broker收到数据后会主动推送给Consumer。该获取方式一般实时性较高。 该获取方式是典型的发布-订阅模式,即Consumer向其关联的Queue注册了监听器,一旦发现有新的消息到来就会触发回调的执行,回调方法是Consumer去Queue中拉取消息。而这些都是基于Consumer与Broker间的长连接的。长连接的维护是需要消耗系统资源的。

拉取式和推送式的对比:

  • pull:需要应用去实现对关联Queue的遍历,实时性差;但便于应用控制消息的拉取
  • push:封装了对关联Queue的遍历,实时性强,但会占用较多的系统资源

广播消费

广播消费模式下,相同消费者组的每个消费者实例都接收同一个Topic的全量消息。即每条消息都会被发送到消费者组中的每个消费者。

集群消费

集群消费模式下,相同消费者组的每个消费者实例平均分摊同一个Topic的消息。即每条消息只会被发送到消费者组中的某个消费者,默认情况下是使用集群模式。

消费进度

广播模式:消费进度保存在 consumer 端。因为广播模式下consumer group中每个consumer都会消费所有消息,但它们的消费进度是不同。所以consumer各自保存各自的消费进度。

集群模式:消费进度保存在 broker 中。consumer group中的所有consumer共同消费同一个Topic中的消息,同一条消息只会被消费一次。消费进度会参与到了消费的负载均衡中,故消费进度是需要共享的。

集群消费进度保存在 "用户目录\store\config\consumerOffset.json" 路径下:

相关推荐

  1. <span style='color:red;'>RocketMQ</span>

    RocketMQ

    2024-06-06 19:02:05      50 阅读
  2. <span style='color:red;'>RocketMQ</span>

    RocketMQ

    2024-06-06 19:02:05      27 阅读
  3. <span style='color:red;'>RocketMQ</span>

    RocketMQ

    2024-06-06 19:02:05      23 阅读
  4. docker启动rocketmq简洁教程

    2024-06-06 19:02:05       41 阅读
  5. rocketMQ基本认识

    2024-06-06 19:02:05       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 19:02:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 19:02:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 19:02:05       87 阅读
  4. Python语言-面向对象

    2024-06-06 19:02:05       96 阅读

热门阅读

  1. 化妆品FDA认证需要注意哪方面

    2024-06-06 19:02:05       29 阅读
  2. 深拷贝与浅拷贝

    2024-06-06 19:02:05       32 阅读
  3. 如何把图片保存成16位png格式?

    2024-06-06 19:02:05       35 阅读
  4. WPS/Office(Word、Excel、PPT) 自动测评方法

    2024-06-06 19:02:05       31 阅读
  5. Yolov10训练自己的数据集

    2024-06-06 19:02:05       31 阅读
  6. HBase

    HBase

    2024-06-06 19:02:05      24 阅读