RocketMQ原理详解(看这篇就够了)

RocketMQ原理详解(看这篇就够了)-mikechen

RocketMQ简介

RocketMQ是一款开源的分布式消息中间件,具有高吞吐量、低延迟和高可靠性的特点。

主要解决,如下4大场景:

RocketMQ原理详解(看这篇就够了)-mikechen

1、应用解耦

通过消息队列将生产者、和消费者解耦,比如:电商平台中,用户下单后,物流服务…等,可以通过消息队列解耦,彼此独立处理自己的业务逻辑。

2、异步通信

在系统间传递消息时,生产者发送消息后,不需要立即等待消费者处理完毕,而是可以继续执行其他操作,这样可以提高系统的响应速度、和吞吐量。

3、削峰填谷

最典型的就是:阿里双11,秒杀活动中,用户的抢购请求通过消息队列暂存,这就是典型的“削峰填谷”,避免因为瞬时高并发导致数据库压力过大。

4、消息广播

支持消息的多播,便于实现通知、和广播功能,比如:系统监控报警,当发现系统异常时,报警消息通过消息队列广播多个。

 

RocketMQ原理

RocketMQ原理详解(看这篇就够了)-mikechen

架构和组件

RocketMQ架构,如下图所示:

RocketMQ原理详解(看这篇就够了)-mikechen

RocketMQ架构:主要由NameServer、Broker、Producer以及Consumer四部分构成。

1.NameServer

提供命名服务,负责管理Topic和Broker的元数据信息。

要包括两个功能,如下图所示:

RocketMQ原理详解(看这篇就够了)-mikechen

1)Broker管理

  • NameServer接受Broker集群的注册信息,并且保存下来作为路由信息的基本数据;
  • 然后提供心跳检测机制,检查Broker是否还存活;

2)路由信息管理

每个NameServer将保存关于Broker集群的整个路由信息,Producer和Conumser通过NameServer,就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。

 

2.Broker

消息中间件的服务器,负责存储和传递消息。

如下图所示:

RocketMQ原理详解(看这篇就够了)-mikechen

Broker的核心功能包含:

  1. 接收 Producer 发过来的消息;
  2. 处理 Consumer 的消费消息请求;
  3. 消息的持 久化存储;
  4. 消息的 HA 机制;
  5. 服务端过滤功能等 。

 

3.Producer

消息的生产者,负责发送消息到Broker。

生产者发送消息时,先与Namesrv交互获取Broker信息,然后与Broker建立连接发送消息。

如下图所示:

RocketMQ原理详解(看这篇就够了)-mikechen

  • Producer创建消息时,需要指定消息的主题(Topic)、标签(Tag)和消息体(Body)等内容。
  • 主题用于对消息进行分类和归类,标签用于对消息进行更细粒度的过滤和筛选。
  • 消息体是实际的业务数据。

 

4.Consumer

消息的消费者,负责从Broker订阅并消费消息。

如下图所示:

RocketMQ原理详解(看这篇就够了)-mikechen

消费者通过与Namesrv交互获取Broker信息,并根据主题和队列进行消息订阅。

消费者从Broker拉取消息进行消费,可以设置消费模式(顺序消费或并发消费)和消费进度。

 

消息存储

RocketMQ采用顺序写磁盘的方式持久化消息,以保证高吞吐量和消息的持久性。

消息存储在CommitLog文件中,其中包含了消息的主题、标签、属性等信息。

消息索引存储在Index文件中,用于快速查找消息。

 

消息的顺序性保证

RocketMQ支持顺序消费,在同一个队列上的消息按照发送顺序被消费。

对于全局有序的场景,可以将消息发送到同一个队列中。

对于局部有序的场景,可以将消息发送到多个队列中,并在消费端根据消息的某个关键属性进行排序。

 

高可用和容错性

RocketMQ通过主从复制机制实现高可用性和容错性。

Broker集群中的每个主节点都有相应的备份节点,当主节点出现故障时,备份节点可以接管服务。

Namesrv也可以配置为集群模式,提供高可用性和容错性。

 

消息的事务性

RocketMQ支持消息的事务性,允许生产者发送带有事务标记的消息。

生产者发送事务消息时,会先执行本地事务,然后根据事务结果提交或回滚消息。

事务消息的状态和进度由Broker和生产者共同管理和维护。

以上就是RocketMQ原理详解,更多RocketMQ请查看:RocketMQ最全详解(万字图文教程)

陈睿mikechen

十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法