RocketMQ中的基本概念

消息Message

消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。

主题Topic

Topic表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。

一个生成者可以同时发送多种Topic的消息;而一个消费者只能消费特定的topic。

标签tag

消息的二级分类,相同topic下区分不同类型的消息。

队列queue

存储消息的物理实体。一个topic中可以包含多个queue。一个queue的消息只能被一个消费者消费。

消息标识messageId/key

每个消息拥有唯一的messageId,且可以携带具有业务标识的key,方便对消息的查询。

messageId有两个:生产者send消息时会字段生成一个messageId(msgId),当消息到达broker后,也会自动生成一个messageId(offsetMsgId)。它们都被成为消息标识。

msgId:由producer端生成,生成规则:producerIp+进程pid+MessageClientIDSetter类的ClassLoader的hashcode+当前时间+AutomicInteger自增技术器。

offsetMsgId:由broker端生成,生成规则:brokerIp+物理分区的offset(queue中的偏移量)。

key:用户指定的业务相关的唯一标识。

Producer

消息生成者,负责生成消息。Producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟。

RocketMQ中的消息生成者都是以生产者组的形式出现。生产者组是同一类生产者的集合,发送相同topic类型的消息。一个生产者组可以同时发送多个主题的消息。

Consumer

消息消费者,负责消费消息。一个消息消费者会从Broker服务器中获取到消息,并对消息进行相关业务处理。

RocketMQ中的消息消费者都是以消费者组的形式出现。消费者组是同一类消费者的集合,消费的是同一个topic的消息。实现了负载均衡(将topic中的不同queue平均分配给不同的消费者)和容错(一个消费者挂了,其他可以继续消费它对应的queue)

消费者组的Consumer数量应该小于等于订阅topic的queue数量,否则的话多出的consumer将不能消费消息。

一个topic类型的消息可以被多个消费者同时消费。

Name Server

Name Server是由Broker和Topic路由的注册中心,支持Broker的动态注册与发现。

Broker

Broker充当着消息中转角色,负责存储消息、转发消息。Broker在RocketMQ系统中负责接收并存储从生产者发送来的消息,同时为消费者的拉取请求做准备。Broker同时也存储着消息相关的元数据,包括消费者组消费进度偏移offset、主题、队列等。

posted @ 2021-10-12 10:59  LinAlex  阅读(150)  评论(0)    收藏  举报