RocketMQ核心概念

基本概念

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高可用架构.png
  • 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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容