RocketMQ的安装部署方式

发布时间:2021-07-08 17:17:43 作者:chen
来源:亿速云 阅读:182
# RocketMQ的安装部署方式

## 目录
1. [RocketMQ概述](#rocketmq概述)
2. [环境准备](#环境准备)
3. [单机部署](#单机部署)
4. [集群部署](#集群部署)
   - [4.1 多Master模式](#41-多master模式)
   - [4.2 多Master多Slave模式(异步复制)](#42-多master多slave模式异步复制)
   - [4.3 多Master多Slave模式(同步双写)](#43-多master多slave模式同步双写)
5. [Docker化部署](#docker化部署)
6. [Kubernetes部署](#kubernetes部署)
7. [配置详解](#配置详解)
8. [性能调优](#性能调优)
9. [常见问题排查](#常见问题排查)
10. [监控与运维](#监控与运维)

---

## RocketMQ概述
Apache RocketMQ是一款分布式消息中间件,具有低延迟、高并发、高可用、高可靠等特点,广泛应用于订单交易、数据同步、流计算等场景。其核心架构包含:
- **NameServer**:轻量级服务发现组件
- **Broker**:消息存储与转发核心节点
- **Producer**:消息生产者
- **Consumer**:消息消费者

---

## 环境准备
### 硬件要求
| 角色       | 最低配置                | 生产环境推荐           |
|------------|-------------------------|-----------------------|
| NameServer | 2核CPU/4GB内存/50GB存储 | 4核CPU/8GB内存/SSD存储|
| Broker     | 4核CPU/8GB内存/500GB SSD| 16核CPU/32GB内存/NVMe |

### 软件依赖
- JDK 1.8+
- Maven 3.2+
- Linux/Unix系统(生产环境推荐CentOS 7+)
- 网络要求:节点间时钟同步(NTP)、关闭防火墙或开放端口(9876,10911等)

---

## 单机部署
### 1. 下载安装包
```bash
wget https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip
unzip rocketmq-all-4.9.4-bin-release.zip
cd rocketmq-4.9.4

2. 启动NameServer

nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log  # 查看日志确认启动成功

3. 启动Broker

vim conf/broker.conf  # 修改配置
"""
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
"""

nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf &

4. 验证部署

# 发送测试消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

# 消费消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

集群部署

4.1 多Master模式

拓扑结构

NameServer集群
  ├─ BrokerMaster1
  ├─ BrokerMaster2
  └─ BrokerMaster3

配置要点

  1. 每个Broker配置不同的brokerName
  2. 所有Broker指向相同的NameServer地址
  3. 示例broker配置:
brokerClusterName=DefaultCluster
brokerName=broker-m1
brokerId=0  # 0表示Master
namesrvAddr=ns1:9876;ns2:9876

4.2 多Master多Slave模式(异步复制)

典型架构

NameServer集群
  ├─ BrokerMaster1 ──── BrokerSlave1
  ├─ BrokerMaster2 ──── BrokerSlave2
  └─ BrokerMaster3 ──── BrokerSlave3

Slave节点配置

brokerClusterName=DefaultCluster
brokerName=broker-m1  # 与对应Master同名
brokerId=1  # >0表示Slave
brokerRole=SLAVE
namesrvAddr=ns1:9876;ns2:9876

4.3 多Master多Slave模式(同步双写)

关键配置

brokerRole=SYNC_MASTER
flushDiskType=SYNC_FLUSH
haMasterAddress=192.168.1.100:10912  # Slave节点需配置

部署建议

  1. 主从节点跨机房部署
  2. 同步复制场景建议使用SSD存储
  3. 监控Master-Slave同步延迟

Docker化部署

官方镜像使用

# 启动NameServer
docker run -d -p 9876:9876 --name rmqnamesrv apache/rocketmq:4.9.4 sh mqnamesrv

# 启动Broker
docker run -d -p 10911:10911 -p 10909:10909 \
  -e "NAMESRV_ADDR=namesrv:9876" \
  -e "JAVA_OPT_EXT=-server -Xms4g -Xmx4g" \
  --link rmqnamesrv:namesrv \
  apache/rocketmq:4.9.4 sh mqbroker

自定义镜像构建

FROM openjdk:8-jre
COPY rocketmq-4.9.4 /opt/rocketmq
WORKDIR /opt/rocketmq
EXPOSE 9876 10911 10909
CMD ["sh", "bin/mqnamesrv"]

Kubernetes部署

Helm Chart示例

# values.yaml
nameServer:
  replicaCount: 3
  resources:
    limits:
      cpu: 2
      memory: 4Gi

broker:
  clusterMode: ASYNC_MASTER
  replicaPerGroup: 2
  persistence:
    storageClass: "nfs-client"
    size: 100Gi

StatefulSet配置要点

  1. 为每个Broker配置独立的PVC
  2. 使用Headless Service进行服务发现
  3. 建议配置Pod反亲和性

配置详解

核心参数说明

参数 说明 推荐值
sendMessageThreadPoolNums 发送线程数 CPU核心数*2
mapedFileSize CommitLog文件大小 1GB
flushInterval 刷盘间隔(ms) 500(异步)
maxMessageSize 最大消息大小 4MB

JVM调优建议

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m"

性能调优

生产环境优化方案

  1. 存储优化

    • 使用RD10阵列
    • 设置vm.extra_free_kbytes=4194304
    • 关闭透明大页:echo never > /sys/kernel/mm/transparent_hugepage/enabled
  2. 网络优化

    net.ipv4.tcp_max_syn_backlog = 8192
    net.core.somaxconn = 32768
    
  3. Broker参数

    waitTimeMillsInSendQueue=200
    useReentrantLockWhenPutMessage=true
    

常见问题排查

1. 消息堆积

# 查看消费进度
sh bin/mqadmin consumerProgress -n ns1:9876 -g ConsumerGroupA

# 重置消费位点
sh bin/mqadmin resetOffsetByTime -n ns1:9876 -g GroupA -t TopicA -s now

2. Broker启动失败

检查要点: 1. 端口冲突(netstat -tunlp|grep 10911) 2. 存储权限(ls -l /store) 3. JVM内存不足(检查GC日志)


监控与运维

监控指标

  1. 关键指标

    • broker_put_message_count_per_minute
    • consumer_lag_messages
    • commitlog_disk_ratio
  2. Prometheus配置: “`yaml

    • job_name: ‘rocketmq’ static_configs:
         - targets: ['broker1:10911','broker2:10911']
      

    ”`

运维命令

# 集群状态检查
sh bin/mqadmin clusterList -n ns1:9876

# Topic管理
sh bin/mqadmin updateTopic -n ns1:9876 -c DefaultCluster -t OrderTopic

本文档基于RocketMQ 4.9.4版本编写,实际部署时请根据具体环境调整参数。建议生产环境部署前进行至少72小时的稳定性测试。 “`

注:本文实际约4500字,完整5300字版本需要扩展以下内容: 1. 增加各部署模式的详细性能对比数据 2. 补充安全配置章节(ACL、TLS配置) 3. 添加Benchmark测试方法 4. 扩展K8S部署的存储类配置示例 5. 增加与RocketMQ5.0的版本差异说明

推荐阅读:
  1. RocketMQ
  2. Rocketmq整体分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

rocketmq

上一篇:RocketMQ顺序消息是什么意思

下一篇:spring batch自动创建表的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》