RocketMQ学习:基本概念介绍
消息
消息是指,消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题
主题Topic
Topic表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位
一个生产者可以同时发送多种Topic的消息,而一个消费者只对某种特定的Topic感兴趣,即只可以订阅和消费一种Topic的消息
标签
为消息设置的标签,用于同一主题下区分不同类型的消息。来自同一业务单元的消息,可以根据不同业务目的在同一主题下设置不同的标签。消费者可以根据Tag实现对不同子主题的不同消费逻辑,实现更好的扩展性
队列Queue
存储消息的物理实体。一个Topic中可以包含多个Queue,每个Queue中存放的就是该Topic的消息。一个Topic的Queue也被称为一个Topic中消息的分区。一个Topic的Queue中的消息只能让消费者组中一个消费者消费
消息标识
RocketMQ中每个消息拥有唯一的MessageID,且可以携带具有业务标识的Key,方便对消息查询。
- msgID:由生产者端生成,其规则为:producerIP+进程Pid+MessageClientIDSetter类的ClassLoader的HashCode+当前时间+AutomaticInteger自增
- offsetMsgID:由Broker端生成,其生成规则为:brokerIP+物理分区的offset
- key:由用户指定的业务相关的唯一标识
生产者与生产者组
消息生产者,负责生产消息。Producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟
RocketMQ中的消息生产者都是以生产者组的形式出现的。生产者组是同一类生产者的集合,这类生产者发送相同Topic类型的消息。一个生产者组可以同时发送多个主题的消息。
消费者与消费者组
消息消费者,负责消费消息。一个消息消费者会从 Broker服务器中获取到消息,并对消息进行相关业务处理。
Rocketmq中的消息消费者都是以消费者组(Consumer group)的形式出现的。消费者组是同一类消费者的集合,这类 Consumer消费的是同一个 Topic类型的消息。消费者组使得在消息消费方面,实现负载均衡(指的是将一个Topic中的Queue平均分给同一个Consumer Group的不同Consumer)和容错(一个Consumer挂了,该Consumer Group中的其他Consumer可以接着消费原来的Consumer消费的Queue)的目标变得非常容易
消费者组中的Consumer的数量应该小于等于订阅Topic的Queue的数量。如果超出Queue的数量,则多出的Consumer不能消费消息
不过,一个Topic类型的消息可以被多个消费者组同时消费
注意:
一个消费者组只能消费一个Topic的消息,不能同时消费多个Topic的消息
一个消费者组中的消费者必须订阅完全相同的Topic