RacketMQ概述

215 阅读3分钟

一、基本概念

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

2.主题(Topic):表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。一个生产者可以同时发送多种主题的消息,一个消费者只能消费一种主题的消息(一对多和一对一)。

3.标签(Tag):为消息设置的标签,用于同一主题下区分不同类型的消息。来自同一业务单元的消息,可以根据不同业务目的在同一主题下设置不同的标签。标签能够有效地保持代码的清晰度和连贯性,并永华RocketMQ提供的查询系统。消费者可以根据Tag实现对不同子主题的不同消费逻辑,实现更好的拓展性。

4.队列(Queue):存储消息的物理实体,一个Topic中可以包含多个Queue,每个Queue中存放就是该Topic的消息,一个Topic的Queue也被成为一个Topic中消息的分区(Partition)。同一个消费者组中只能有一个消费者消费某一个Topic的QUeue中的消息,一个消费者可以消费多个Queue。

5.消息标示(MessageId/key):RocketMQ中每个消息拥有唯一的MessageID,且可以携带具有业务标识的key,以方便对消息的查询。MessageI都有两个,在生产者send消息是会自动生成一个MEssageId(msgID,有可能重复),当消息到达Broke(片)后,Broker也会自动生成一个MessageID(offsetID,重复概率大)。msgid,offsetMsgId和key都被称为消息标示

msgID生成规则:

prodecerID+进程pid+MessageClientIDSetter类的ClassLoader的hashCode+当前时间+AutomicInteger自增计数器

\

offsetMsgid:由broker端生成,规则:brokerIP+物理分区的offset(Queue中的偏移量)

\

key:由用户指定的业务相关的唯一表示

二、系统架构

1.producer 生产消息,通过MQ的负载均衡木块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟。

RockerMQ中的消息生产者都是以生产者组的形式出现的。生产者组是同一类生产者的集合,这类Producer发送相同Topic类型的消息,但是一个生产者组中的生产者可以发送多种Topic类型的消息。也就是说,生产者组中的生产者,可以发送相同的多种topic消息。

2.Consumer 消费消息,从Broker服务器中获取到消息,并对消息进行相关业务处理。消费者都是以消费者组的形式出现的,消费同一种Topic类型的消息。一个topic中不同的queue只能被一个消费者消费,而消费者可以消费topic中多个不同的queue。消费者组使得在消息消费方面,实现负责均衡和容错的目标变得非常容易。

消费者组中的Consumer的数量应当小于等于订阅的topic中的queue数量

3.NameServer 是Broker与Topic路由的注册中心,支持Broker的动态注册与发现,主要包括两个功能

①Broker管理:接受Broker集群的注册信息并保存下来作为路由信息的基本数据;提供心跳检测机制,检查Broker是否还存货

②路由信息管理:每个NameServer中都保存者Broker集群的整个路由信息和用于客户端查询的队列信息。Producer和Conumser通过NameServer可以获取整个Broker集群的路由信息,从而进行消息的投递和消费

\