在 Apache RocketMQ 中,Broker 的命名方式是集群管理、路由发现和高可用机制的基础。合理的命名对于运维、监控和故障排查至关重要。 RocketMQ 的 Broker 命名遵循一套分层结构,主要由两个核心部分构成:


✅ 1. Broker 的完整标识:brokerName

在 RocketMQ 中,真正用于标识一个 Broker 身份的是 brokerName,而不是 IP 或端口。

📌 brokerName 的命名规范(推荐格式):

{brokerClusterName}-{brokerId}-{instanceId}

但实际上,最常见和推荐的格式是:

{brokerClusterName}-{brokerId}

各部分含义:

字段 说明 示例
brokerClusterName Broker 所属的集群名称 RocketMQ-Cluster-A
brokerId Broker 在集群中的唯一 ID 0, 1, 2, 100
instanceId 可选,实例标识(一般不用)  

✅ 2.brokerId 的特殊含义

brokerId 不只是一个编号,它决定了 Broker 的角色:

brokerId 角色 说明
0 Master (主节点) 负责读写,可有多个(多主)
> 0!= 0 Slave (从节点) 只读,复制 Master 数据
> 100000 Dledger 模式下的 Follower 在基于 Raft 协议的 Dledger 架构中使用

📝 注意:同一个 brokerName 下的所有节点(Master + Slave)必须共享相同的 brokerName,但通过 brokerId 区分角色

示例:

# Master 节点
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0

# Slave 节点(复制 broker-a)
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1

这表示:broker-a 是一个主从组,brokerId=0 是主,brokerId=1 是从。


✅ 3. 实际配置方式(broker.conf 文件)

# 集群名称(多个 Broker 可属于同一集群)
brokerClusterName=rocketmq-cluster

# 当前 Broker 的名称(逻辑名)
brokerName=broker-a

# 当前 Broker 的 ID(决定主从角色)
brokerId=0

# Broker 物理地址(自动注册,通常不需手动设置)
# brokerIP1=192.168.0.1

部署多个 Broker 时,只需修改 brokerNamebrokerId

节点 brokerName brokerId 角色
A-Master broker-a 0 Master
A-Slave broker-a 1 Slave
B-Master broker-b 0 Master
B-Slave broker-b 1 Slave

这样就构成了一个 多主多从 的集群。


✅ 4. 命名最佳实践

建议 说明
🔤 使用有意义的 brokerName broker-prod-01, broker-order, broker-log,便于识别用途
🔢 brokerId=0 表示 Master 所有主节点都用 0,从节点用 1, 2, …
🌐 避免重复 brokerName 跨集群 否则路由会混乱
📁 配置文件分离 每个 Broker 使用独立的 broker.conf
🧩 结合环境命名 broker-a-prod, broker-a-test

✅ 5. 查看 Broker Name 的方式

1. 通过日志查看:

The broker[broker-a, 192.168.0.1:10911] registered successfully.

2. 通过命令行查看集群状态:

mqadmin clusterList -n 127.0.0.1:9876

输出示例:

Broker Name: broker-a
    Addr: 192.168.0.1:10911 (brokerId: 0) -> MASTER
    Addr: 192.168.0.2:10911 (brokerId: 1) -> SLAVE

✅ 6. Dledger 模式下的命名差异

在 Dledger 模式(基于 Raft 实现高可用)中:

  • 不再使用 brokerId=0 表示 Master
  • 多个节点使用相同的 brokerNamebrokerId=0
  • 角色由 Dledger 协议动态选举(Leader/Follower)
brokerName=broker-a
brokerId=0
enableDLegerCommitLog=true
dLegerGroup=broker-a
dLegerPeers=n1-192.168.0.1:40911;n2-192.168.0.2:40911;n3-192.168.0.3:40911

此时 brokerName 代表一个 Dledger 组,节点通过 n1, n2 等标识。


✅ 总结:Broker 命名要点

要点 说明
🎯 核心是 brokerName + brokerId 共同构成 Broker 的逻辑身份
🔄 brokerId=0 是 Master >0 是 Slave(传统主从)
🏗️ 命名应清晰、可读 便于运维和监控
🌐 集群内 brokerName 唯一 避免冲突
📈 支持多主多从 提升吞吐和可用性

结论:RocketMQ 的 Broker 命名不是随意的,而是基于 brokerName-brokerId 的结构化设计 ,支撑了主从复制、集群路由、故障转移等核心功能。合理命名是构建稳定 RocketMQ 集群的第一步。

Updated: