基本概念
Broker
Broker相当于一个RocketMQ存储实例,一般情况下一台机器上部署一个Broker。多个Borker主节点会均分Topic的消息。生产者和消费者都会与Broker建立长连接。
Topic
Topic表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。
Tag
为消息设置的标志,用于同一主题下区分不同类型的消息。它不能控制消息的路由,用于消息真正被某个消费者节点接收后进行业务逻辑区分的标识。
Queue
类似于HashMap中数组的节点,提升并发(多个生产者或消费者)时的读写性能。每个Topic在单个Broker节点都会分为多个Queue。
GID
一类Producer或Consumer,这类Producer或Consumer通常生产或消费同一类消息,GID是分组的标识。广播消费模式下相同分组的每个Consumer实例都接收全量的消息;集群消费模式下,相同分组的每个Consumer实例平均分摊消息。
高可用

- RocketMQ主要包括Broker集群、Producer集群、Consumer集群和 NameServer 集群
NameServer集群
NameServer是专为 RocketMQ 设计的轻量级名称服务,具有简单、可集群横向扩展、无状态,节点之间互不通信等特点。
Broker集群
Broker用于接收生产者发送消息,或者消费者消费消息的请求。一个Broker集群由多组Master/Slave组成,Master可写可读,Slave只可以读,Master将写入的数据同步给Slave。每个Broker节点,在启动时,都会遍历NameServer列表,与每个NameServer建立长连接,注册自己的信息,之后定时上报。
Producer集群
消息的生产者,通过NameServer集群获得Topic的路由信息,包括Topic下面有哪些Queue,这些Queue分布在哪些Broker上等。Producer只会将消息发送到Master节点上,因此只需要与Master节点建立连接。
Consumer集群
消息的消费者,通过NameServer集群获得Topic的路由信息,连接到对应的Broker上消费消息。注意,由于Master和Slave都可以读取消息,因此Consumer会与Master和Slave都建立连接。
客户端负载均衡
生产端
- 生产者负载均衡实质上是在选择MessageQueue对象;一种是默认策略,从MessageQueue列表中随机选择一个,实现过程是通过自增随机数对列表大小取余获取位置信息,但获得的MessageQueue所在的集群不能是上次的失败集群。另一种是集群超时容忍策略,先随机选择一个MessageQueue,如果因为超时等异常发送失败,会优先选择该broker集群下其他的messeagequeue进行发送;如果没有找到则从之前发送失败broker集群中选择一个MessageQueue进行发送;如果还没有找到则使用默认策略。
- 普通消息队列选择策略 MQFaultStrategy
消费端
- 非有序消息有平均分配、平均轮询等方式。
- 有序消息在拉取消息时会给消息队列加锁,被锁定的队列不参与Rebalance。
- 当发送和消费参与的队列只有一个,则是全局有序;如果多个队列参与,则为分区有序。
- 队列分配策略 AllocateMessageQueueStrategy
网友评论