RocketMQ核心概念

# NameServer

主要负责Topic和路由信息的管理,功能类似Dubbozookeeper

无状态节点,可集群部署,节点之间无任何信息同步。

Broker每30秒向NameServer发送心跳包,心跳包中包含topic的路由信息。

NameServer受到Broker心跳包后更新brokerLiveTable中的信息,特别记录心跳时间lastUpdateTime

NameServer每隔10s扫描brokerLiveTable,检测表中上次收到的心跳包时间,比较当前时间与上一次时间,超过120秒在,则认为Broker不可用,移除路由表中与该Broker的相关信息。

生产者拉取主题的路由信息,即消息生产者并不立即感知Broker服务器的新增与删除。

# Producer

消息生产者。

ProducerNameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServerTopic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。

# Broker

消息中转角色,负责消息存储、转发。

Broker分为MasterSlave,一个Master可以对应多个Slave,但是一个Slave只能对应一个MasterMasterSlave对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示SlaveMaster也可以部署多个。每个BrokerNameServer集群中的所有节点建立长连接,定时注册Topic信息到所有NameServer

# Consumer

消费者

ConsumerNameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取Topic路由信息,并向提供Topic服务的MasterSlave建立长连接,且定时向MasterSlave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。

# Producer Group

用来表示一个发送信息的应用,一个Prducer Group下包含多个Producer实例,可以是多台机器,也可以是一台机器的多个进程,或者一个进程的多个Producer对象。一个Producer Group可以发送多个Topic消息。

在分布式系统中,发送事务消息时,如果Producer中途意外宕机,Broker会主动回调Producer Group内的任意一台机器来确认事务状态。

# Consumer Group

用来表示一个消费消息的应用。一个Consumer Group下包含多个Consumer实例,可以是多台机器、多个进程或一个进程的多个实例对象。不同Consumer Group都会受到消息,一个Consumer Group下的多个Consumer以均摊的方式消费消息)。如果设置为广播方式,那么这个Consumer Group下的每个实例都消费全量数据。

# Topic

消息的第一级类型

最细粒度的订阅单位,一个Group可以订阅多个Topic

# Tag

消息的第二级类型,方便灵活控制。

同一个Consumer Group下的Consumer,订阅Topic以及对应Tag的规则要一致,因为Consumer均摊消息,如果订阅逻辑不一致,可能导致丢消息。

# Group

一个组可以订阅多个Topic

# 顺序消费消息原理

通过指定消息hash,Broker根据hash将消息推送的Consumer Group下的同一个Consumer上。

上次更新: 2023/04/09, 16:34:32
最近更新
01
go-admin-ui项目仿写练手1-登录页
06-29
02
maven依赖问题
06-17
03
JVM相关命令
02-21
更多文章>