技术博客 技术博客
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • kafka

    • kafka-2.7.0 基本概念
    • Kafka-2.7.0 搭建及参数解析
    • kafka-2.7.0 spring boot 集成 kafka
    • kafka-2.7.0 kafka Connect
    • kafka-2.7.0 Kafka Streams 流处理
  • RabbitMQ

    • rabbitmq 简介
  • RocketMQ

    • RocketMQ 基础概念
    • RocketMQ 搭建
      • 环境和准备
      • 创建存储路径
      • 配置
      • 单机启动
        • 启动前处理
        • 启动 nameserver
        • 启动 broker
      • console 启动
      • 双主配置
        • 双主配置
        • 修改配置文件
        • rocketmq-console 注意
    • RocketMQ 整合spring boot
  • redis

    • Redis 介绍及安装
    • Redis 命令介绍
    • Redis 分布式锁介绍
    • Redis 事务介绍
    • Redis 的key失效通知介绍
    • Redis 配置文件解读
    • Redis 记一次宕机排查
    • Redis 高可用(一) 主从理论
    • Redis 高可用(二) 哨兵理论
    • Redis 高可用(三) 搭建
    • Redis 集群搭建
  • zookeeper

    • Zookeeper 介绍及安装
    • Zookeeper 做为锁使用
  • nginx

    • nginx-1.18.0 安装
    • nginx 常见问题总结
    • nginx 高可用
  • 数据库套件

    • MyCat 1.6.7(一)MySQL高可用及分库分表
    • MyCat 1.6.7(二)高可用及权限
    • shardingsphere 4.x(一)Sharding-JDBC使用
    • shardingsphere 4.x(二)Sharding-Proxy使用
目录

RocketMQ 搭建

文档基于 RocketMQ-4.7.1

# 环境和准备

ip hosts
10.240.30.102 node102
10.240.30.100 node100

vim /etc/hosts
10.240.30.100 node100
10.240.30.102 node102

下载地址 (opens new window),下载 Binary 文件,上传到服务器然后解压,我下载的比较早是 4.7.1 版本的。

# 创建存储路径

RocketMQ 物理存储的路径

mkdir /home/rocketmq-all-4.7.1/store
mkdir /home/rocketmq-all-4.7.1/store/commitlog
mkdir /home/rocketmq-all-4.7.1/store/consumequeue
mkdir /home/rocketmq-all-4.7.1/store/index
1
2
3
4

# 配置

修改 broker.conf

vim /home/rocketmq-all-4.7.1/conf/broker.conf 
1
# Broker 对外服务器的监听端口
listenPort=10911
# 集群名称
brokerClusterName = DefaultCluster
# broker名字,不同机器 broker 名字可以是重复的(集群情况),同一机器名字不能一样
brokerName = broker-a
# 表示 Master,> 0 表示 Slave
brokerId = 0

# nameServer 地址,分号分隔 必须设置
namesrvAddr=node102:9876

# brokerIP1 当前broker监听的IP,必须设置
brokerIP1=node102
# brokerIP2 存在broker主从时,在broker主节点上配置了brokerIP2的话,broker从节点会连接主节点配置的brokerIP2来同步。
# brokerIP2=node100

# 删除文件时间点,默认时凌晨4点
deleteWhen = 04
# 文件保留时间,默认时48小时
fileReservedTime = 48 
# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
# 限制消息大小
maxMessageSize=65536 

# broker的角色:ASYNC_MASTER(异步复制Master),SYNC_MASTER(同步双写 MASTER),SLAVE
brokerRole = ASYNC_MASTER
# ASYNC_FLUSH(异步刷盘),SYNC_FLUSH(同步刷盘)
flushDiskType = ASYNC_FLUSH

# 是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true


# commitLog 每个文件的小默认1G
mapedFileSizeCommitLog=1073741824
# consumeQueue 每个文件啊默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

# 存储路径
storePathCommitLog=/home/rocketmq-all-4.7.1/store/commitlog
# 消费队列存储历经
storePathConsumeQueue=/home/rocketmq-all-4.7.1/store/consumequeue
# 消息索引存储路径
storePathIndex=/home/rocketmq-all-4.7.1/store/index

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

# 单机启动

# 启动前处理

建议测试环境修改堆内存

/home/rocketmq-all-4.7.1/bin/runbroker.sh
/home/rocketmq-all-4.7.1/bin/runserver.sh
1
2
# 修改前
# runbroker 的
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
# runserver 的
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# 修改后
# runbroker 的
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g"
# runserver 的
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
1
2
3
4
5
6
7
8
9
10

# 启动 nameserver

nohup sh mqnamesrv &
# 日志查看
tail -f ~/logs/rocketmqlogs/namesrv.log
1
2
3

看到如下表示启动成功

2021-01-29 13:34:15 INFO FileWatchService - FileWatchService service started
1

# 启动 broker

nohup sh mqbroker -c /home/rocketmq-all-4.7.1/conf/broker.conf > /dev/null 2>&1 &
# 日志查看
tail -f ~/logs/rocketmqlogs/broker.log
1
2
3

看到如下表示启动成功

2021-01-29 13:34:49 INFO brokerOutApi_thread_1 - register broker[0]to name server node102:9876 OK
2021-01-29 13:34:49 INFO main - The broker[broker-a, node102:10911] boot success. serializeType=JSON and name server is node102:9876
1
2

注意开放端口
/sbin/iptables -I INPUT -p tcp --dport 9876 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 10911 -j ACCEPT

# console 启动

rocketmq 是在 linux 上部署的,console 我是在本地启动。

  1. 下载 rocketmq-console 项目

  2. 修改配置文件,被注释的我就不帖了。

server.address=0.0.0.0
server.port=8080

#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.level.root=INFO
logging.config=classpath:logback.xml
# 配置地址
rocketmq.config.namesrvAddr=10.240.30.102:9876
# vip 通道修改成 false,否则会再查看消息的时候报错
rocketmq.config.isVIPChannel=false
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
#set the message track trace topic if you don't want use the default one
rocketmq.config.msgTrackTopicName=
rocketmq.config.ticketKey=ticket

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  1. 修改 windows 的 hosts,win+r C:\WINDOWS\system32\drivers\etc,加入如下
10.240.30.102 node102
1

很奇怪的是你会发现,你在 console 的配置是 IP:PORT,但是如果没修改 hosts 你会发现部分报错是 connect to node102:10911 failed,集群信息都没办法显示。

  1. 启动看到如下即为成功

# 双主配置

当我们安装成功之后会看到 rocketmq 的 conf 目录如下:

2m-2s-async  2m-2s-sync  2m-noslave  broker.conf  dledger  logback_broker.xml  logback_namesrv.xml  logback_tools.xml  plain_acl.yml  tools.yml
1
  • 2m-2s-async 双主双从异步复制
  • 2m-2s-sync 双主双从同步复制
  • 2m-noslave 双主
  • 我们也可以自己建立规则如下,内容和其他保持一致即可
[root@node102 conf]# mkdir 4m-4s-async
[root@node102 conf]# ls
2m-2s-async  2m-2s-sync  2m-noslave  4m-4s-async  broker.conf  dledger  logback_broker.xml  logback_namesrv.xml  logback_tools.xml  plain_acl.yml  tools.yml
1
2
3

# 双主配置

# 修改配置文件

在 102 修改如下

[root@node102 2m-noslave]# pwd
/home/rocketmq-all-4.7.1/conf/2m-noslave
[root@node102 2m-noslave]# ls
broker-a.properties  broker-b.properties  broker-trace.properties
[root@node102 2m-noslave]# vim broker-a.properties
1
2
3
4
5

100 修改

[root@node102 2m-noslave]# vim broker-b.properties
1

和单机模式差不多,修改如下:

# 102 是 broker-a 100 是 broker-b
brokerName = broker-a
# nameServer 地址,分号分隔 必须设置
namesrvAddr=node102:9876;node100:9876

# brokerIP1 当前broker监听的IP,必须设置
# brokerIP1=node102
# brokerIP2 存在broker主从时,在broker主节点上配置了brokerIP2的话,broker从节点会连接主节点配置的brokerIP2来同步。
# brokerIP2=node100
1
2
3
4
5
6
7
8
9

nameserver 和以上启动方式一样,broker 启动方式改为如下

# 100 启动
nohup sh mqbroker -c /home/rocketmq-all-4.7.1/conf/2m-noslave/broker-b.properties > /dev/null 2>&1 &
# 102 启动
nohup sh mqbroker -c /home/rocketmq-all-4.7.1/conf/2m-noslave/broker-a.properties > /dev/null 2>&1 &
# 同样还是查看
tail -f ~/logs/rocketmqlogs/broker.log
1
2
3
4
5
6

看到如下定位启动成功

2021-02-01 10:41:14 INFO brokerOutApi_thread_1 - register broker[0]to name server node102:9876 OK
2021-02-01 10:41:14 INFO brokerOutApi_thread_2 - register broker[0]to name server node100:9876 OK
1
2

集群一旦成功,在 100 的 mqadmin topiclist 中也会看到 102 的 topic,这并非同步。

# rocketmq-console 注意

  1. 在本机 hosts 添加
10.240.30.100 node100
1
  1. 发现在 rocketmq.config.namesrvAddr=10.240.30.102:9876 只写一个 ip,依然可以读到集群信息,所以没必要在添加 100

上次更新: 6/11/2025, 4:10:30 PM
RocketMQ 基础概念
RocketMQ 整合spring boot

← RocketMQ 基础概念 RocketMQ 整合spring boot→

Theme by Vdoing | Copyright © 2023-2025
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式