消息中间件之RocketMQ简介

Posted Linyb极客之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息中间件之RocketMQ简介相关的知识,希望对你有一定的参考价值。

一、什么是RocketMQ

消息中间件之RocketMQ简介

 

上图是一个典型的消息中间件收发消息的模型,RocketMQ也是这样的设计,简单说来,RocketMQ具有以下特点:

  • 是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。

  • Producer、Consumer、队列都可以分布式。

  • Producer向一些队列轮流发送消息,队列集合称为Topic,Consumer如果做广播消费,则一个consumer实例消费这个Topic对应的所有队列,如果做集群消费,则多个Consumer实例平均消费这个topic对应的队列集合。

  • 能够保证严格的消息顺序

  • 提供丰富的消息拉取模式

  • 高效的订阅者水平扩展能力

  • 实时的消息订阅机制

  • 亿级消息堆积能力

  • 较少的依赖


二、专业术语


Producer

消息生产者,生产者的作用就是将消息发送到 MQ,生产者本身既可以产生消息,如读取文本信息等。也可以对外提供接口,由外部应用来调用接口,再由生产者将收到的消息发送到 MQ。


Producer Group

生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组。在这里可以不用关心,只要知道有这么一个概念即可。


Consumer

消息消费者,简单来说,消费 MQ 上的消息的应用程序就是消费者,至于消息是否进行逻辑处理,还是直接存储到数据库等取决于业务需要。


Consumer Group

消费者组,和生产者类似,消费同一类消息的多个 consumer 实例组成一个消费者组。


Topic

Topic 是一种消息的逻辑分类,比如说你有订单类的消息,也有库存类的消息,那么就需要进行分类,一个是订单 Topic 存放订单相关的消息,一个是库存 Topic 存储库存相关的消息。


Message


Tag

标签可以被认为是对 Topic 进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。


Broker

Broker 是 RocketMQ 系统的主要角色,其实就是前面一直说的 MQ。Broker 接收来自生产者的消息,储存以及为消费者拉取消息的请求做好准备。


Name Server

Name Server 为 producer 和 consumer 提供路由信息。


三、RocketMQ 物理部署结构

消息中间件之RocketMQ简介

如上图所示, RocketMQ的部署结构有以下特点:

  • Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。

  • Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server。

  • Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。

  • Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。


四、RocketMQ 逻辑部署结构

消息中间件之RocketMQ简介

如上图所示,RocketMQ的逻辑部署结构有Producer和Consumer两个特点。

  • Producer Group

用来表示一个发送消息应用,一个Producer Group下包含多个Producer实例,可以是多台机器,也可以是一台机器的多个进程,或者一个进程的多个Producer对象。一个Producer Group可以发送多个Topic消息,Producer Group作用如下:

  1. 标识一类Producer

  2. 可以通过运维工具查询这个发送消息应用下有多个Producer实例

  3. 发送分布式事务消息时,如果Producer中途意外宕机,Broker会主动回调Producer Group内的任意一台机器来确认事务状态。


  • Consumer Group

用来表示一个消费消息应用,一个Consumer Group下包含多个Consumer实例,可以是多台机器,也可以是多个进程,或者是一个进程的多个Consumer对象。一个Consumer Group下的多个Consumer以均摊方式消费消息,如果设置为广播方式,那么这个Consumer Group下的每个实例都消费全量数据。

五、RocketMQ 数据存储结构

如上图所示,RocketMQ采取了一种数据与索引分离的存储方法。有效降低文件资源、IO资源,内存资源的损耗。即便是阿里这种海量数据,高并发场景也能够有效降低端到端延迟,并具备较强的横向扩展能力。

六、RocketMQ 集群部署模式

  • 单 master 模式
    也就是只有一个 master 节点,称不上是集群,一旦这个 master 节点宕机,那么整个服务就不可用,适合个人学习使用。

  • 多 master 模式
    多个 master 节点组成集群,单个 master 节点宕机或者重启对应用没有影响。
    优点:所有模式中性能最高
    缺点:单个 master 节点宕机期间,未被消费的消息在节点恢复之前不可用,消息的实时性就受到影响。
    注意:使用同步刷盘可以保证消息不丢失,同时 Topic 相对应的 queue 应该分布在集群中各个节点,而不是只在某各节点上,否则,该节点宕机会对订阅该 topic 的应用造成影响。

  • 多 master 多 slave 异步复制模式
    在多 master 模式的基础上,每个 master 节点都有至少一个对应的 slave。master
    节点可读可写,但是 slave 只能读不能写,类似于 mysql 的主备模式。
    优点: 在 master 宕机时,消费者可以从 slave 读取消息,消息的实时性不会受影响,性能几乎和多 master 一样。
    缺点:使用异步复制的同步方式有可能会有消息丢失的问题。

  • 多 master 多 slave 同步双写模式
    同多 master 多 slave 异步复制模式类似,区别在于 master 和 slave 之间的数据同步方式。
    优点:同步双写的同步模式能保证数据不丢失。
    缺点:发送单个消息 RT 会略长,性能相比异步复制低10%左右。
    刷盘策略:同步刷盘和异步刷盘(指的是节点自身数据是同步还是异步存储)
    同步方式:同步双写和异步复制(指的一组 master 和 slave 之间数据的同步)
    注意:要保证数据可靠,需采用同步刷盘和同步双写的方式,但性能会较其他方式低。



以上是关于消息中间件之RocketMQ简介的主要内容,如果未能解决你的问题,请参考以下文章

消息中间件之 RocketMQ

RocketMQ详解

高性能分布式消息中间件—RocketMQ

喜马拉雅 Apache RocketMQ 消息治理实践

自建RocketMQ中间件开发

再见RocketMQ!全新一代消息中间件,带可视化管理,文档贼友好!