CentOS7 Docker安装RocketMQ(单机版)

参考

docker安装rocketMQ5.3.3详细步骤_rocketmq docker 安装-CSDN博客

RocketMQ的Docker镜像部署(以及Dashboard的部署、ACL配置)_docker rocketmq dashboard-CSDN博客

RocketMQ官网docker部署


环境准备

系统要求

  • CentOS7系统
  • Docker已安装并启动
  • 至少2GB内存
  • 至少5GB磁盘空间

检查Docker状态

# 检查Docker是否正常运行
docker version
 
# 如果Docker未启动,执行以下命令
sudo systemctl start docker
sudo systemctl enable docker

创建Docker网络

为了让RocketMQ各个组件能够相互通信,我们需要创建一个自定义网络:

# 创建名为rocketmq的网络

docker network create rocketmq

安装NameServer

NameServer是RocketMQ的注册中心,负责管理Broker的路由信息。

创建namesrv在宿主机的日志映射目录

sudo mkdir -p /home/rocketmq/namesrv/logs
sudo chmod -R 777 /home/rocketmq

为什么要设置777权限? Docker容器内的进程可能使用不同的用户ID,设置777权限确保容器能够正常读写这些目录。

启动NameServer容器

docker run -d \
  --name rmqnamesrv \
  --network rocketmq \
  --restart=always \
  -p 9876:9876 \
  -v /home/rocketmq/namesrv/logs:/home/rocketmq/logs/ \
  -e "MAX_POSSIBLE_HEAP=100000000" \
  apache/rocketmq:5.2.0 \
  sh mqnamesrv

参数说明

  • --name rmqnamesrv:容器名称
  • --network rocketmq:使用我们创建的网络
  • --restart=always  开机启动,失败也会一直启动
  • -p 9876:9876:端口映射,9876是NameServer默认端口
  • -v /home/rocketmq/namesrv/logs:/home/rocketmq/logs/:数据卷挂载
  • -e "MAX_POSSIBLE_HEAP=100000000":设置JVM堆内存大小
  • apache/rocketmq:5.2.0:使用的镜像版本
  • sh mqnamesrv:启动NameServer的命令

验证NameServer启动

# 查看容器状态、查看容器日志

docker ps | grep rmqnamesrv
docker logs rmqnamesrv

如果看到类似"The Name Server boot success"的日志,说明启动成功。

安装Broker

Broker是RocketMQ的核心组件,负责消息的存储和转发。

在宿主机上创建broker配置文件、数据存储路径、日志目录

mkdir -p  /home/rocketmq/broker/conf  &&
mkdir -p  /home/rocketmq/broker/store &&
mkdir -p  /home/rocketmq/broker/logs  &&
chmod 777 /home/rocketmq/broker/conf  &&
chmod 777 /home/rocketmq/broker/store &&
chmod 777 /home/rocketmq/broker/logs

拷贝NameServer容器的中的配置文件到Broker

docker cp rmqnamesrv:/home/rocketmq/rocketmq-5.2.0/conf  /home/rocketmq/broker

修改Broker配置

sudo vi /home/rocketmq/broker/conf/broker.conf
# 所属集群名称
brokerClusterName = DefaultCluster

# broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-a

# 0表示Master,大于0表示不同的slave
brokerId = 0

# 表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04

# 在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48

# 有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制
brokerRole = ASYNC_MASTER

# 刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要
flushDiskType = ASYNC_FLUSH

# 是否允许自动创建topic
autoCreateTopicEnable=true

# 是否允许 Broker 自动创建 订阅组
# autoCreateSubscriptionGroup = true

# 设置broker节点所在服务器的ip地址
brokerIP1 = 192.168.10.100
namesrvAddr=rmqnamesrv:9876

重要提醒: 

  • 请将brokerIP1=你的服务器IP地址中的"你的服务器IP地址"替换为你实际的服务器IP地址! 可以通过ip addr showifconfig命令查看。
  • fileReservedTime = 48 这里可以自行改一下配置,可以设置更长一点;

启动Broker容器

docker run -d \
  --name rmqbroker \
  --network rocketmq \
  --restart=always \
  -p 10909:10909 \
  -p 10911:10911 \
  -p 10912:10912 \
  -v /home/rocketmq/broker/conf:/home/rocketmq/rocketmq-5.2.0/conf \
  -v /home/rocketmq/broker/store:/home/rocketmq/store \
  -v /home/rocketmq/broker/logs:/home/rocketmq/logs \
  -e "MAX_POSSIBLE_HEAP=200000000" \
  apache/rocketmq:5.2.0 \
  sh mqbroker -c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf

参数说明

-c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf 指定启动时用的配置文件

-p 10909 端口:是 Broker 的 VIP 监听端口。当普通端口的请求非常繁忙时,Broker 端的所有 I/O 线程可能都在执行请求,导致后续网络请求进入队列,使消息请求执行缓慢。这种情况下,生产者发送消息、消费者获取元数据信息等请求可以使用 VIP 端口,以降低消息发送的延时。

-p10911 端口:是 Broker 的监听端口,主要用于执行 Topic 的重平衡等操作,同时也承载着普通的消息网络请求,例如处理生产者发送的消息、消费者的拉取消息请求等。

-p10912 端口:是 Broker 的 HA(High Availability,高可用)端口,用于主从节点之间的数据同步,以保证在主节点出现故障时,从节点能够尽快接管工作,确保消息服务的高可用性。

-e “MAX_POSSIBLE_HEAP=200000000” rocketmqinc/rocketmq sh mqbroker : 指定broker服务的最大堆内存

如果需要也可以控制容器内存大小:
–memory=4g \ # 限制容器内存使用
–cpus=2.0 \ # 限制容器CPU使用
–memory=2g \ # 容器总内存限制
-e “MAX_POSSIBLE_HEAP=1073741824” \ # 直接内存1GB
-e “JAVA_OPTS=-Xmx1g” \ # 堆内存1GB

验证Broker启动

# 查看容器状态
docker ps | grep rmqbroker
 
# 查看容器日志
docker logs rmqbroker

如果看到"The broker boot success"的日志,说明启动成功。


安装Dashboard

Dashboard是一个Web管理界面,方便我们管理和监控RocketMQ。

创建目录和修改权限

mkdir -p /home/rocketmq/console/data  &&
chmod 777 /home/rocketmq/console/data

配置用户名和密码

vim /home/rocketmq/console/data/users.properties
# This file supports hot change, any change will be auto-reloaded without Console restarting.
# Format: a user per line, username=password[,N] #N is optional, 0 (Normal User); 1 (Admin)
# Define Admin
# === 规则「用户名=密码,权限」。权限为1表示管理员,为0表示普通用户 ===
admin=admin123,1
# Define Users
# === 屏蔽下边两个账户 ==
#user1=user1
#user2=user2

启动 Dashboard

docker run -d --name rmqconsole \
--network rocketmq \
--restart=always \
-p 8080:8080 \
-v /home/rocketmq/console/data:/tmp/rocketmq-console/data \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Drocketmq.config.loginRequired=true" \
apacherocketmq/rocketmq-dashboard:latest

# 当-Drocketmq.config.loginRequired为false时,则Dashboard不需要登录用户和密码
# 这里的 rocketmq-namesrv 是NameServer的地址

  • 直接访问http://<Dashboard的IP>:8080,输入前面配置的用户、密码
  • 现在已经可以正常使用了


开启 ACL

修改所有Broker节点

编辑Broker配置文件,并加上配置

vim /home/rocketmq/broker/conf/broker.conf
# 开启鉴权
aclEnable = true

编辑ACL配置文件,并加上配置,这里一定要与上面的配置对齐,否则启动Broker会报错

vim /home/rocketmq/broker/conf/plain_acl.yml
# 添加一个给Dashboard使用的用户
  - accessKey: console
    secretKey: 12345678
    whiteRemoteAddress:
    admin: true

重启Broker节点

docker restart rmqbroker

修改 Dashboard 启动命令

  • 移除已部署的Dashboard
docker rm -f rmqconsole
  • 在启动命令中添加accessKey、secretKey
docker run -d --name rmqconsole \
--network rocketmq \
--restart=always \
-p 8080:8080 \
-v /home/rocketmq/console/data:/tmp/rocketmq-console/data \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Drocketmq.config.loginRequired=true -Drocketmq.config.accessKey=console -Drocketmq.config.secretKey=12345678" \
apacherocketmq/rocketmq-dashboard:latest

如果不填写accessKey,则会报错


验证安装

检查所有容器状态

docker ps

你应该看到三个正在运行的容器:

  • rmqnamesrv(NameServer)
  • rmqbroker(Broker)
  • rmqconsole(管理控制台)

测试消息发送和接收

进入Broker容器测试

# 进入Broker容器
docker exec -it rmqbroker bash
 
# 发送测试消息
sh mqadmin sendMessage -n rmqnamesrv:9876 -t TestTopic -p "Hello RocketMQ"
 
# 接收测试消息
sh mqadmin consumeMessage -n rmqnamesrv:9876 -t TestTopic

如果能成功发送和接收消息,说明安装完全成功!

常用操作命令

容器管理

# 查看所有RocketMQ相关容器
docker ps | grep rmq
 
# 停止所有容器
docker stop rmqnamesrv rmqbroker rmqconsole
 
# 启动所有容器
docker start rmqnamesrv rmqbroker rmqconsole
 
# 重启所有容器
docker restart rmqnamesrv rmqbroker rmqconsole
 
# 删除所有容器(谨慎使用!)
docker rm -f rmqnamesrv rmqbroker rmqconsole

查看日志

# 查看NameServer日志
docker logs -f rmqnamesrv
 
# 查看Broker日志
docker logs -f rmqbroker
 
# 查看控制台日志
docker logs -f rmqconsole

进入容器

# 进入NameServer容器
docker exec -it rmqnamesrv bash
 
# 进入Broker容器
docker exec -it rmqbroker bash

故障排除

1. 容器启动失败

现象: 容器无法启动或频繁重启

解决方案:

# 检查容器日志
docker logs 容器名
 
# 检查目录权限
ls -la /home/rocketmq/
 
# 重新设置权限
sudo chmod -R 777 /home/rocketmq/

2. 无法访问管理控制台

现象: 浏览器无法打开http://IP:8080

解决方案:

# 检查防火墙状态
firewall-cmd --state

查看开启的端口 
#临时开放的端口(默认为空)
firewall-cmd --list-ports
 
#永久开放的端口(默认为空)
firewall-cmd --list-ports --permanent

# 永久开放8080端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
 
# 或者临时关闭防火墙(不推荐生产环境)
systemctl stop firewalld

3. 消息发送失败

现象: 客户端连接超时或发送消息失败

解决方案:

  1. 检查broker.conf中的brokerIP1配置是否正确
  2. 确保所有必要端口都已开放:
sudo firewall-cmd --permanent --add-port=9876/tcp
sudo firewall-cmd --permanent --add-port=10909/tcp
sudo firewall-cmd --permanent --add-port=10911/tcp
sudo firewall-cmd --permanent --add-port=10912/tcp
sudo firewall-cmd --reload

4. 内存不足

现象: 容器频繁重启,日志显示内存不足

解决方案: 调整JVM堆内存大小:

# 重新启动容器时调整内存参数
docker run ... -e "MAX_POSSIBLE_HEAP=512000000" ...

5. 数据持久化问题

现象: 容器重启后数据丢失

解决方案: 确保数据卷正确挂载:

# 检查挂载点
docker inspect rmqbroker | grep Mounts -A 200

总结

恭喜你!现在你已经成功在CentOS7上使用Docker安装了完整的RocketMQ环境,包括:

  1. NameServer:注册中心,端口9876
  2. Broker:消息代理,端口10909/10911/10912
  3. 管理控制台:Web界面,端口8080

关键要点回顾

  1. 网络配置:使用自定义Docker网络确保组件间通信
  2. 目录权限:设置正确的目录权限确保数据持久化
  3. IP配置:Broker配置文件中的brokerIP1必须设置为真实IP
  4. 端口开放:确保防火墙开放所有必要端口
  5. 内存配置:根据服务器配置调整JVM堆内存大小
资源下载链接为: https://pan.quark.cn/s/140386800631 通用大模型文本分类实践的基本原理是,借助大模型自身较强的理解和推理能力,在使用时需在prompt中明确分类任务目标,并详细解释每个类目概念,尤其要突出类目间的差别。 结合in-context learning思想,有效的prompt应包含分类任务介绍及细节、类目概念解释、每个类目对应的例子和待分类文本。但实际应用中,类目和样本较多易导致prompt过长,影响大模型推理效果,因此可先通过向量检索缩小范围,再由大模型做最终决策。 具体方案为:离线时提前配置好每个类目的概念及对应样本;在线时先对给定query进行向量召回,再将召回结果交给大模型决策。 该方法不更新任何模型参数,直接使用开源模型参数。其架构参考GPT-RE并结合相关实践改写,加入上下文学习以提高准确度,还使用BGE作为向量模型,K-BERT提取文本关键词,拼接召回的相似例子作为上下文输入大模型。 代码实现上,大模型用Qwen2-7B-Instruct,Embedding采用bge-base-zh-v1.5,向量库选择milvus。分类主函数的作用是在向量库中召回相似案例,拼接prompt后输入大模型。 结果方面,使用ICL时accuracy达0.94,比bert文本分类的0.98低0.04,错误类别6个,处理时添加“家居”类别,影响不大;不使用ICL时accuracy为0.88,错误58项,可能与未修改prompt有关。 优点是无需训练即可有较好结果,例子优质、类目界限清晰时效果更佳,适合围绕通用大模型api打造工具;缺点是上限不高,仅针对一个分类任务部署大模型不划算,推理速度慢,icl的token使用多,用收费api会有额外开销。 后续可优化的点是利用key-bert提取的关键词,因为核心词语有时比语意更重要。 参考资料包括
内容概要:本文详细介绍了哈希表及其相关概念和技术细节,包括哈希表的引入、哈希函数的设计、冲突处理机制、字符串哈希的基础、哈希错误率分析以及哈希的改进与应用。哈希表作为一种高效的数据结构,通过键值对存储数据,能够快速定位和检索。文中讨论了整数键值和字符串键值的哈希方法,特别是字符串哈希中的多项式哈希及其优化方法,如双哈希和子串哈希的快速计算。此外,还探讨了常见的冲突处理方法——拉链法和闭散列法,并提供了C++实现示例。最后,文章列举了哈希在字符串匹配、最长回文子串、最长公共子字符串等问题中的具体应用。 适合人群:计算机科学专业的学生、算法竞赛选手以及有一定编程基础并对数据结构和算法感兴趣的开发者。 使用场景及目标:①理解哈希表的工作原理及其在各种编程任务中的应用;②掌握哈希函数的设计原则,包括如何选择合适的模数和基数;③学会处理哈希冲突的方法,如拉链法和闭散列法;④了解并能运用字符串哈希解决实际问题,如字符串匹配、回文检测等。 阅读建议:由于哈希涉及较多数学知识和编程技巧,建议读者先熟悉基本的数据结构和算法理论,再结合代码实例进行深入理解。同时,在实践中不断尝试不同的哈希策略,对比性能差异,从而更好地掌握哈希技术。
### 安装 RocketMQ 单机版 #### 准备工作 确保系统已安装 JDK 1.8 或更高版本。可以通过以下命令验证 Java 版本: ```bash java -version ``` 如果未安装,则需先完成 JDK 的安装。 #### 下载并解压 RocketMQ 切换至 `/home` 目录,并通过 `wget` 工具下载指定版本的 RocketMQ 发行包[^1]: ```bash cd /home wget -O rocketmq-4.9.2.zip https://downloads.apache.org/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip unzip rocketmq-4.9.2.zip -d /usr/local/ ln -s /usr/local/rocketmq /opt/rocketmq ``` 上述操作会创建软链接方便后续管理。 #### 修改 VM 参数 编辑 RocketMQ 配置文件中的 JVM 启动参数,通常位于 `${ROCKETMQ_HOME}/bin/runserver.sh` 和 `${ROCKETMQ_HOME}/bin/runbroker.sh` 文件内。适当调整内存分配和其他性能调优选项以适应服务器硬件条件[^3]。 #### 设置环境变量 为了简化命令执行路径,在 `.bashrc` 中添加如下内容以便全局访问 RocketMQ 脚本工具: ```bash echo 'export ROCKETMQ_HOME=/opt/rocketmq' >> ~/.bashrc echo 'export PATH=$PATH:$ROCKETMQ_HOME/bin' >> ~/.bashrc source ~/.bashrc ``` 这一步骤使得可以在任意位置运行 RocketMQ 提供的各种 shell 脚本而无需输入完整路径。 #### 编写 Service 文件 (可选) 对于希望将 RocketMQ 注册成系统服务的情况,可以按照官方文档指导编写 systemd service unit file 并放置于 `/etc/systemd/system/` 目录下。 #### 启动 Name Server 和 Broker 依次启动 NameServer 和 Broker 实例来初始化消息队列集群: ```bash nohup sh ${ROCKETMQ_HOME}/bin/mqnamesrv & sleep 3 nohup sh ${ROCKETMQ_HOME}/bin/mqbroker -n localhost:9876 auto_create_topic_enable=true & ``` 等待几秒钟让各组件完全启动之后即可开始发送测试消息[^4]: ```bash sh ${ROCKETMQ_HOME}/tools.sh org.apache.rocketmq.example.quickstart.Producer ``` 以上即是在 CentOS 7 上构建 RocketMQ 单节点实例的过程概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值