一、环境准备与工具选择
1.1 系统与依赖环境
Windows系统下搭建RocketMQ需满足以下条件:
- 操作系统:Windows 10/11专业版或企业版(需支持Hyper-V虚拟化)
- Java环境:JDK 1.8+(推荐OpenJDK或Oracle JDK)
- 内存配置:至少8GB RAM(双主双从集群建议16GB+)
- 磁盘空间:主节点需预留50GB+存储空间
1.2 工具链安装
- RocketMQ二进制包:从Apache官网下载最新稳定版(如5.1.3)
- Erlang环境(可选):若需监控工具,需安装Erlang/OTP
- 网络工具:Wireshark(用于抓包分析)、Putty(SSH连接)
- 虚拟化方案:推荐使用WSL2或VMware Workstation创建Linux子系统(因原生Windows对RocketMQ支持有限)
二、双主双从集群架构设计
2.1 集群拓扑结构
┌─────────────┐ ┌─────────────┐│ Master1 │ │ Master2 ││ (NameSrv1) │ │ (NameSrv2) │└───────┬─────┘ └───────┬─────┘│ │▼ ▼┌───────────────────┐ ┌───────────────────┐│ Slave1 (Sync) │ │ Slave2 (Async) ││ (Broker-A-S) │ │ (Broker-B-S) │└───────────────────┘ └───────────────────┘
- 同步复制:Master1与Slave1采用同步写(保证数据强一致性)
- 异步复制:Master2与Slave2采用异步写(提升吞吐量)
- NameServer:双节点部署避免单点故障
2.2 端口规划
| 组件 | 默认端口 | 集群专用端口 |
|---|---|---|
| NameServer | 9876 | 9877 |
| Broker | 10911 | 10912/10913 |
| JMX | 1099 | 1100/1101 |
三、详细配置步骤
3.1 单节点基础配置
-
解压安装包:
tar -xzf rocketmq-5.1.3.tar.gz -C C:\rocketmq
-
修改运行内存(conf/2m-noslave/):
# broker.confJVM_XMS="2g"JVM_XMX="4g"
-
配置NameServer(namesrv.properties):
rocketmq.namesrv.addr=127.0.0.1:9876;127.0.0.1:9877
3.2 双主节点配置
Master1配置(broker-a.properties):
brokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0listenPort = 10911namesrvAddr=127.0.0.1:9876;127.0.0.1:9877defaultTopicQueueNums=8autoCreateTopicEnable=trueautoCreateSubscriptionGroupEnable=true
Master2配置(broker-b.properties):
brokerClusterName = DefaultClusterbrokerName = broker-bbrokerId = 0listenPort = 10912# 其他参数同Master1,需修改brokerName
3.3 双从节点配置
Slave1同步配置:
brokerId = 1brokerRole = SYNC_MASTERflushDiskType = SYNC_FLUSHhaListenPort = 10921
Slave2异步配置:
brokerId = 1brokerRole = SLAVEflushDiskType = ASYNC_FLUSHhaListenPort = 10922
四、Windows特有问题处理
4.1 端口冲突解决
- 使用
netstat -ano | findstr 9876检查端口占用 - 修改注册表禁用HNS端口保留:
Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HNS\Parameters]"DisablePortReservation"=dword:00000001
4.2 文件权限设置
- 赋予RocketMQ目录完全控制权限:
icacls "C:\rocketmq" /grant Everyone:(F) /T
- 关闭Windows Defender实时保护(测试环境)
4.3 性能优化
- 内存映射文件:修改
conf/tools.conf:rocketmq.broker.fileReservedTime=72rocketmq.broker.deleteWhen=04rocketmq.broker.diskSpaceWarningLevelRatio=0.9
- 网络优化:
- 禁用TCP自动调优:
netsh int tcp set global chimney=disablednetsh int tcp set global rss=disabled
- 调整MTU值(建议1400)
- 禁用TCP自动调优:
五、集群验证与测试
5.1 启动顺序
- 启动NameServer集群:
start mqnamesrv.cmd -n 127.0.0.1:9876start mqnamesrv.cmd -n 127.0.0.1:9877
- 依次启动Master1/Master2:
start mqbroker.cmd -n localhost:9876 -c conf\2m-noslave\broker-a.propertiesstart mqbroker.cmd -n localhost:9877 -c conf\2m-noslave\broker-b.properties
- 启动Slave节点
5.2 集群状态检查
- 使用JConsole监控:
jconsole 127.0.0.1:1099
- 命令行验证:
sh mqadmin clusterList -n 127.0.0.1:9876
- 发送测试消息:
// Producer示例DefaultMQProducer producer = new DefaultMQProducer("test_group");producer.setNamesrvAddr("127.0.0.1:9876;127.0.0.1:9877");producer.start();Message msg = new Message("TestTopic", "Hello RocketMQ".getBytes());SendResult result = producer.send(msg);
六、运维建议
-
备份策略:
- 每日凌晨3点执行
mqadmin dumpLog - 配置7天滚动日志
- 每日凌晨3点执行
-
监控告警:
- 监控
/dev/shm目录使用率 - 设置磁盘空间阈值告警(85%)
- 监控
-
升级方案:
- 滚动升级时先停Slave节点
- 使用
mqadmin updateBrokerConfig在线修改配置
七、常见问题排查
-
Broker无法注册:
- 检查
namesrvAddr配置是否包含所有NameServer节点 - 验证防火墙是否放行9876/9877端口
- 检查
-
消息堆积:
- 检查
ConsumeQueue文件是否完整 - 调整
consumeThreadMin参数(默认20)
- 检查
-
主从同步延迟:
- 使用
mqadmin brokerStatus查看同步进度 - 调整
haTransferBatchSize(默认32KB)
- 使用
通过以上步骤,开发者可在Windows环境下构建出生产级可用的RocketMQ双主双从集群。实际部署时建议结合Prometheus+Grafana搭建可视化监控平台,并定期进行混沌工程演练验证集群容错能力。对于高并发场景,可考虑将Windows节点作为开发测试环境,生产环境迁移至Linux系统以获得更优性能。