RocketMQ核心概念
文章目录
本章主要是针对RocketMQ中涉及到的核心概念做一个名词解释。
MessageQueue
MQ(Message Queue)是一个非常常见的数据结构,消息中承载了数据,队列具有先进先出的特点,换一个角度来看,其实就是具有先进先出的数据流。但是大部分的消息中间件都具有分布式的特征,就会出现多个Queue,这样,同一个Queue中的消息是有序的(先进先出),不同Queue中的消息就是无序的了。
Message
消息,是数据的载体。每条消息必须归属于一个Topic,且消息都有一个Producer生成的MessageId和Broker生成的MessageId,生成Message时也可以指定一个业务的标识Key,可以通过这两个MessageId或Key查询到这条消息。
NameServer
RocketMQ是分布式的集群,需要有注册中心进行管理,所以NameServer就提供了集群管理、路由管理的功能。
Broker
Broker充当着消息代理服务器的角色,实现了消息的存储、投递、查询等功能,是一个高可用的设计。队列消息、消费者组、消费进度等元数据信息都是由Broker维护的。
Topic
Topic是一个逻辑上的概念,它标识了同一类消息,也是生产者进行消息订阅的基本单位。
Producer
Producer作为消息生产者的角色,负责制造消息。RocketMQ提供了同步发送、异步发送、单项发送的发送方式,其中,同步发送是需要等待服务器(Broker)的返回结果;异步发送方式不会阻塞程序,而是在接收到服务器的返回结果之后执行预先设定的回调;单项发送方式无论消息是否发送成功都不影响。
Producer Group
Producer Group是生产者组,它标记了发送的是同一类消息且发送逻辑是一致的。对于普通消息来说,生产者组显得很鸡肋,但是对于事物消息来说很有用处。当原始生产者宕机之后,Broker进行事物回查时只需要找到同一个生产者组的Producer就可以完成回查动作,因为相同生产者组的Producer具有相同的逻辑。
Consumer
Consumer作为消息的消费者,会从Broker拉取消息,供应用系统使用。
Consumer Group
Consumer Group是消费组,标识了同一类的消费者,同一个消费组的消费者订阅了相同的Topic且消费逻辑是一致的。消费组是在消息消费时实现负载均衡的一个重要手段。
对于集群消息来说,同一个Topic的Broker的同一个Queue只会被同一个消费组中的一个消费者消费,当同一个消费组中的消费者数量大于该Topic的Queue数量时,超出Queue数量的消费者将分配不到Queue,也就无法消费该Topic的消息。这也意味着,正常情况下,同一个Topic中的一条消息只会被某个消费组中的一个消费者消息;同时,同一个Topic中的消息可以被每个消费组中一个消费者消费。
Tag
Tag是RocketMQ为消息设计的一个标识,用于区分同一个Topic下不同类型的消息,相当于是一个二级分类。生产者在发送消息时可以为消息指定一个Tag,消费者按照自己的需要在订阅消息时指定Tag,则该消费者只会收到指定Tag的消息。Broker在存储消息时也为Tag做了专门的设计,可以加快消息的查询。
Clustering/Boardcasting
RocketMQ支持集群消费和广播消费两种模式。集群消费模式下,同一条消息只会被同一个消费组中的一个消费者消费。广播消费模式下,同一条消息可以被同一个消费组中的所有消费者消费。