RocketMQ 部署架构
NameServer
管理Broker。如:各个邮局的管理机构
NameServer 是一个无状态节点,可集群部署,节点之间无任何信息同步。
Broker
暂存和传输消息。如:邮局
Broker 部署相对复杂,Broker 分为 Master 和 Slave,一个 Master 可以对应多个 Slave,但是一个 Slave 只能对应一个 Master,Master 与 Slave 的对应关系通过指定相同的 BrokerName,不同的 BrokerId 来定义,BrokerId 为 0 表示为 Master ,非 0 表示 Slave 。Master 也可以部署多个。
每个 Broker 与 NameServer 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 NameServer。
注意:当前 RocketMQ 版本在部署架构上支持一 Master 多 Slave,但只有 BrokerId = 1 的从服务器才会参与消息的读负载。
Topic
区分消息的种类。一个发送者可以发送消息给一个或多个Topic。一个消息的接受者可以订阅一个或者多个Topic消息。
Message Queue
相当于是Topic的分区。用于并行发送和接收消息。
Producer
消息发送者。如:发信者
Producer 完全无状态,可集群部署
Producer 与 NameServer 集群中的其中一个节点(随机选择)建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 发送心跳。
Consumer
消息接收者。如:收信者
Consumer 与 NameServer 集群中的其中一个节点(随机选择)建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Master、Slave 建立长连接,且定时向 Master、Slave 发送心跳。
Consumer 既可以从 Master 订阅消息,也可以从 Slave 订阅消息,消费者在向 Master 拉取消息时,Master 服务器会根据拉取偏移量与最大偏移量的距离(判断是否读老消息,产生读I/O),以及从服务器是否可读等因素建议下一次是从 Master 还是 Slave 拉取。