面试题答案
一键面试NameServer 角色和作用
- 路由管理:NameServer 作为 RocketMQ 的路由信息管理中心,存储了各个 Broker 的路由数据,包括 Broker 名称、所属集群、Broker 地址、Topic 与 Broker 的映射关系等。
- 无状态服务:NameServer 是一个几乎无状态的节点,各个 NameServer 之间相互独立,不进行数据同步,这样保证了其架构的简单性和稳定性。Broker 会定期向所有 NameServer 发送心跳包,汇报自身的状态信息,NameServer 根据心跳信息判断 Broker 是否存活。
Broker 角色和作用
- 消息存储:Broker 负责消息的存储,它将接收到的消息持久化到磁盘,确保消息的可靠性。通常采用顺序写的方式来提高写性能。
- 消息转发:Broker 接收生产者发送的消息,并根据 Topic 等信息将消息转发给相应的消费者。同时,它也支持消息的拉取和推送两种模式,以满足不同应用场景的需求。
- 集群协调:在集群环境下,Broker 之间会相互通信,进行数据同步和负载均衡等操作。例如,当一个 Broker 故障时,其他 Broker 可以接管其部分工作,保证整个集群的可用性。
搭建简单双 Broker 的 RocketMQ 集群步骤
- 环境准备
- 确保服务器上安装了 JDK 1.8 及以上版本。
- 下载 RocketMQ 安装包,解压到指定目录,例如
/opt/rocketmq
。
- 配置 NameServer
- 进入 RocketMQ 解压目录的
conf
文件夹,复制namesrv
文件夹并重命名为namesrv1
和namesrv2
。 - 分别编辑
namesrv1/runserver.sh
和namesrv2/runserver.sh
文件,设置 JVM 内存参数,例如:
- 进入 RocketMQ 解压目录的
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
- 启动两个 NameServer 实例:
nohup sh bin/mqnamesrv -n 192.168.1.100:9876 >/dev/null 2>&1 &
nohup sh bin/mqnamesrv -n 192.168.1.101:9876 >/dev/null 2>&1 &
其中 `192.168.1.100` 和 `192.168.1.101` 为两个 NameServer 所在服务器的 IP 地址。
3. 配置 Broker
- 复制 conf/2m - 2s - async
文件夹,重命名为 broker - a
和 broker - b
。
- 编辑 broker - a/broker - conf.properties
文件,配置如下内容:
brokerClusterName = DefaultCluster
brokerName = broker - a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = 192.168.1.100:9876;192.168.1.101:9876
- 同样编辑 `broker - b/broker - conf.properties` 文件,配置如下内容:
brokerClusterName = DefaultCluster
brokerName = broker - b
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = 192.168.1.100:9876;192.168.1.101:9876
- 分别编辑 `broker - a/runbroker.sh` 和 `broker - b/runbroker.sh` 文件,设置 JVM 内存参数,例如:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
- 启动 Broker
- 启动
broker - a
:
- 启动
nohup sh bin/mqbroker -c broker - a/broker - conf.properties >/dev/null 2>&1 &
- 启动 `broker - b`:
nohup sh bin/mqbroker -c broker - b/broker - conf.properties >/dev/null 2>&1 &
- 验证集群
- 可以通过 RocketMQ 自带的工具
mqadmin
来验证集群是否搭建成功。例如,查看集群状态:
- 可以通过 RocketMQ 自带的工具
sh bin/mqadmin clusterList -n 192.168.1.100:9876
- 如果能正确显示两个 Broker 的信息,则说明双 Broker 的 RocketMQ 集群搭建成功。