CentOS 部署 RocketMQ 详细指南

embedded/2024/9/17 18:58:04/ 标签: centos, rocketmq, linux

1. RocketMQ 5.3.0 简介

什么是 RocketMQ?

Apache RocketMQ 是一个分布式消息中间件,最初由阿里巴巴开发并开源。它基于发布-订阅(Pub-Sub)模式,具有高性能、低延迟和高可靠性等特点。RocketMQ 支持大规模消息流处理,常用于电商交易、金融支付等场景。

RocketMQ 的核心组件

RocketMQ 的核心组件包括:

  • NameServer:负责管理 Broker 节点,提供路由信息,类似于服务发现。
  • Broker:消息存储与转发的核心,处理客户端的消息生产和消费请求。
  • Producer:消息的生产者,负责将消息发送到 Broker。
  • Consumer:消息的消费者,从 Broker 获取并处理消息。
  • RocketMQ Console:Web 管理界面,用于监控和管理 RocketMQ 集群。

版本 5.3.0 的新特性

RocketMQ 5.3.0 带来了一系列改进,包括但不限于:

  • 性能优化:进一步优化了消息传输的效率,提升了集群的扩展能力。
  • 配置增强:引入了更灵活的配置方式,方便在复杂场景下的部署。
  • 安全性更新:加强了对权限控制和加密通信的支持。

2. 部署环境准备

在部署 RocketMQ 之前,确保你的服务器满足以下要求:

系统要求

  • 操作系统:CentOS 7 或更高版本(本文以 CentOS 7 为例)
  • 内核版本:推荐 3.10 及以上
  • 磁盘空间:至少 10GB 可用空间
  • 网络环境:确保服务器之间的网络连通性

硬件需求

  • CPU:至少 2 核,推荐 4 核或以上
  • 内存:至少 4GB,推荐 8GB 或以上
  • 磁盘 IOPS:高并发场景建议使用 SSD 磁盘

软件依赖

  • JDK 版本:RocketMQ 5.3.0 需要 JDK 8 或以上版本
  • Maven:用于编译 RocketMQ 控制台(可选)

3. 安装和配置 JDK

RocketMQ 依赖于 Java 运行环境(JDK),建议使用 OpenJDK 8。

检查 JDK 版本

首先,检查系统中是否已经安装了 JDK:

java -version

在这里插入图片描述

如果输出结果中显示了 openjdk version "1.8.x"jdk1.8.x,说明已经安装了合适的 JDK 版本。

安装 OpenJDK 8

如果没有安装 JDK 或版本不合适,执行以下命令安装 OpenJDK 8:

sudo yum install -y java-1.8.0-openjdk-devel

配置环境变量

确认 JDK 安装路径,并设置 JAVA_HOME 环境变量:

# 查找 JDK 安装路径
sudo update-alternatives --config java# 配置 JAVA_HOME
echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' >> ~/.bash_profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile

执行 java -version 验证是否正确配置。

4. 下载并安装 RocketMQ 5.3.0

获取 RocketMQ 5.3.0 安装包

使用以下命令下载 RocketMQ 5.3.0 安装包:

wget https://archive.apache.org/dist/rocketmq/5.3.0/rocketmq-all-5.3.0-bin-release.zip

解压与目录结构说明

解压安装包并重命名:

unzip rocketmq-all-5.3.0-bin-release.zip
mv rocketmq-all-5.3.0-bin-release /usr/local/rocketmq

RocketMQ 的目录结构如下:

  • bin/:包含启动脚本和管理工具
  • conf/:包含配置文件
  • lib/:包含运行时依赖的库文件
  • logs/:存放 RocketMQ 的日志文件

5. 配置 RocketMQ

RocketMQ 的配置分为两个部分:NameServer 和 Broker。我们将详细讨论如何调整这些配置以满足特定需求。

NameServer 配置

NameServer 是一个无状态的组件,只需要启动就可以正常工作。默认配置足够满足大多数场景。

启动前,可以通过修改 conf/ 目录下的配置文件自定义端口和日志路径等参数。

Broker 配置

Broker 是 RocketMQ 的核心组件,负责处理消息的存储和转发。它的配置更为复杂,默认配置如下:

# 启动命令中的配置文件路径
vi /usr/local/rocketmq/conf/broker.conf

配置文件中的主要参数包括:

  • brokerName: Broker 的名称,集群中必须唯一。
  • brokerId: Broker 的 ID,0 表示主节点,其他为从节点。
  • namesrvAddr: NameServer 的地址列表。
  • autoCreateTopicEnable: 是否允许自动创建 Topic。

可以根据需求调整这些参数。

修改 JVM 内存参数

由于 RocketMQ 是一个高性能的消息中间件,合理的 JVM 内存配置至关重要。默认情况下,RocketMQ 的 NameServer 和 Broker 使用的 JVM 参数在启动脚本 bin/runserver.shbin/runbroker.sh 中设置。

如果你的服务器内存有限,建议调整这些参数。以 Broker 为例:

vi /usr/local/rocketmq/bin/runserver.sh
vi /usr/local/rocketmq/bin/runbroker.sh# 将默认的 JVM 配置修改为适合当前机器环境的配置(我的机器内存较小,只有3G,故此处内存设置小点)
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

在这里插入图片描述

在这里插入图片描述

这里的 XmsXmx 控制了 JVM 的初始和最大堆内存大小,而 Xmn 则指定了年轻代的大小。你可以根据服务器的内存和实际使用场景进行调整。

6. 启动 NameServer 和 Broker

启动 NameServer

执行以下命令启动 NameServer:

nohup sh /usr/local/rocketmq/bin/mqnamesrv &

使用以下命令查看 NameServer 启动日志,确认启动成功:

tail -f ~/logs/rocketmqlogs/namesrv.log

日志中出现 The Name Server boot success... 即表示 NameServer 启动成功。

启动 Broker

在 NameServer 启动后,启动 Broker:

nohup sh /usr/local/rocketmq/bin/mqbroker -n localhost:9876 &

使用以下命令查看 Broker 启动日志:

tail -f ~/logs/rocketmqlogs/broker.log

日志中出现 The broker[broker-a, 172.17.0.2:10911] boot success... 时,说明 Broker 启动成功。

7. 安装并配置 RocketMQ 控制台

RocketMQ 控制台提供了图形化界面,方便监控和管理集群。

下载与安装 RocketMQ Console

git clone https://github.com/apache/rocketmq-dashboard.git
cd rocketmq-dashboard
mvn clean package -DskipTests

配置 NameServer 地址

编辑 src/main/resources/application.yml 文件:

rocketmq:config:namesrvAddr: "localhost:9876"

然后启动控制台:

java -jar target/rocketmq-dashboard-1.0.0-SNAPSHOT.jar

控制台功能简介

访问 http://localhost:8080 可以看到 RocketMQ 控制台的管理界面,提供对 Topic、Consumer、Broker 和消息流的全面监控。

8. 设置 RocketMQ 开机启动

为了让 RocketMQ 在系统启动时自动启动,我们需要将 NameServer 和 Broker 配置为 systemd 服务。

使用 systemd 创建服务

配置 NameServer 服务

创建并编辑 /etc/systemd/system/rocketmq-nameserver.service

[Unit]
Description=RocketMQ NameServer Service
After=network.target[Service]
Type=forking
ExecStart=/usr/local/rocketmq/bin/mqnamesrv
ExecStop=/usr/local/rocketmq/bin/mqshutdown namesrv
User=root
Restart=on-failure[Install]
WantedBy=multi-user.target
配置 Broker 服务

创建并编辑 /etc/systemd/system/rocketmq-broker.service

[Unit]
Description=RocketMQ Broker Service
After=network.target rocketmq-nameserver.service[Service]
Type=forking
ExecStart=/usr/local/rocketmq/bin/mqbroker -n localhost:9876
ExecStop=/usr/local/rocketmq/bin/mqshutdown broker
User=root
Restart=on-failure[Install]
WantedBy=multi-user.target

启用并验证开机启动

启用并启动服务:

chmod +x /usr/local/rocketmq/bin/*
systemctl enable rocketmq-nameserver
systemctl enable rocketmq-broker
systemctl start rocketmq-nameserver
systemctl start rocketmq-broker

验证服务状态:

systemctl status rocketmq-nameserver
systemctl status rocketmq-broker

9. 常见问题与排查

启动失败问题

常见的启动失败问题包括端口冲突、内存不足和配置错误。通过检查日志可以快速定位问题。

日志分析

RocketMQ 日志包括 NameServer 和 Broker 的启动日志、运行日志等,位于 ~/logs/rocketmqlogs/ 目录下。定期检查日志有助于发现潜在问题。

10. 进阶配置与优化

多 NameServer 和多 Broker 配置

在高可用场景下,建议配置多 NameServer 和多 Broker。通过集群化部署,可以增强系统的容灾能力。

性能优化建议

  1. 调整 JVM 内存和垃圾回收策略。
  2. 使用 SSD 提高磁盘 I/O 性能。
  3. 通过调优网络参数减少延迟。

分布式环境下的部署

在分布式环境中,NameServer 和 Broker 通常部署在不同的节点上,并通过内网进行通信。根据业务需求配置合理的负载均衡策略和消息存储策略。


http://www.ppmy.cn/embedded/104173.html

相关文章

在centos系统中kill掉指定进程

如上图,我想kill掉 python3 func_tg_1_vps.py这个进程(而不kill掉python3 func_tg_2_vps.py)。 解决方法: 第一步:首先使用ps -ef | grep python3命令,查出所有包含python3的命令 拿其中一条讲解 root …

GLM大模型 - CogVideoX:5B 开源,2B 转为 Apache 协议

8月6日,我们发布并开源了CogVideoX-2B模型,受到广大开发者的欢迎。 为了促进社区的自主使用和开放式创新,我们现决定将参数规模更大、性能更强的产品级模型 CogVideoX-5B 开源,同时 CogVideoX-2B 的开源协议调整为更加开放的Apac…

git中的分支是什么?分支有哪些好处?如何建立分支?

git中的分支是什么? 在Git中,分支是版本库中记录版本位置(支线)的一种方式。分支可以被视为一条时间线,每次提交都会在这条时间线上形成一个新的版本。通过分支,开发者可以在不影响主线(通常是…

高级java每日一道面试题-2024年8月31日-框架篇[Spring篇]-你对Spring事务传播机制了解多少?

如果有遗漏,评论区告诉我进行补充 面试官: 你对Spring事务传播机制了解多少? 我回答: 在Java的Spring框架中,事务管理是一个非常重要的特性,它帮助开发者以声明式或编程式的方式控制事务的边界、传播行为、隔离级别、超时设置和回滚规则等。事务的传…

Linux基础入门 --2 DAY

常见命令 查看硬件信息 查看cpu lscpu cat /proc/cpuinfo 范例: [rootlocalhost ~]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thr…

Nginx跨域问题解决

背景:云服务器上面部署了后端和前端,前端开发在本地启一个web访问页面,然后访问云服务的后端,然后出现问题 问题:Access to XMLHttpRequest at ‘http://192.168.10.100:8070/auth/login’ from origin ‘http://loca…

Eureka:Spring Cloud中的服务注册与发现如何实现?

Eureka:Spring Cloud中的服务注册与发现如何实现? 1、什么是服务注册与发现?2、Eureka的工作原理3、Eureka的优势 💖The Begin💖点点关注,收藏不迷路💖 在微服务架构的浪潮中,服务注…

【测试】bug 相关知识点总结

目录 一、什么是 bug 二、描述 bug 的要素 三、bug 级别 四、bug 的生命周期 一、什么是 bug 在软件开发中,bug 是指软件程序中存在的错误、缺陷或故障。这些问题可能导致软件在运行时出现意外的行为、产生错误的结果、崩溃或无法正常工作。Bug 可以出现在软件…

【Mybatis】Web中的数据库操作

Mybatis 工作机制1. 加载配置文件:2. 创建 SqlSessionFactory:3. 获取 SqlSession:4. 获取 Mapper 接口:5. 执行 SQL 语句:6. SQL 语句解析和执行:7. 结果映射:8. 事务管理:9. 关闭 …

Dubbo ZooKeeper Spring Boot整合

依赖配置 1. Dubbo 起步依赖 Dubbo 是一款高性能的 Java RPC 框架&#xff0c;用于快速开发高性能的服务。 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.ver…

计算机网络学习笔记~物理层

物理层 物理层的基本概念 具体需要考虑的问题为 物理层考虑的是怎么样才能在连接各种计算机的传输媒体上传输数据比特流 物理层为数据链路层屏蔽了各种传输媒体的差异&#xff0c; 透明的概念 ————使数据链路层只需要考虑如何完成本层的协议和服务&#xff0c;而不必考虑…

数据结构与算法---排序算法

文章目录 排序选择排序冒泡排序插入排序 希尔排序归并排序快速排序桶排序计数排序基数排序堆排序 排序 排序是指将一组数据按照特定的规则或顺序进行排列&#xff0c;比如一个数组[1, 5, 2, 4, 3]按照从小到大的顺序排列后就是[1,2,3,4,5]。 排序算法&#xff08;Sorting alg…

Flink CDC读取Mysql时,Decimal类型数据异常,变成了字符串(源码解析及解决方案)

1. 问题说明 使用Flink CDC 读取mysql数据时,当表字段为decimal时,读取的数据变成了字符串。 如下示例: 环境: Flink 1.18.0 Flink CDC 3.1.1 mysql 8 mysql的数据如下: 使用Flink CDC读取后的数据如下: 为了方便看,复制出来就是: {“id”:1,“price”:“AZA=”,…

如何在D盘创建虚拟环境?包括安装PyTorch和配置PyCharm

摘要&#xff1a;本文首先在D盘创建了虚拟环境&#xff0c;然后在虚拟环境中安装了PyTorch&#xff0c;最后配置了pycharm的解释器。 1. 在 D 盘创建虚拟环境 打开Anaconda Prompt 输入conda info --envs查看当前已有环境 创建自己的虚拟环境&#xff0c;打算命名为py310&…

音频如何低延时回声消除与降噪篇保姆级教程

目录 1 回声消除技术 1.1 回声产生的原因 1.2 传统回声消除方法 1.3 先进的回声消除算法 2 降噪技术 2.1 降噪技术的原理与方法 2.2 传统降噪方法 2.3 先进的降噪算法 3 低延时处理技术 3.1 低延时处理的重要性 3.2 低延时回声消除技术 3.3 低延时降噪技术 4 调试…

UE5开发——射击武器类拾取

整体框架&#xff1a; 拾取武器 要在 Unreal Engine 5 (UE5) 中实现一个按 E 键拾取武器的功能&#xff0c;您可以遵循以下步骤&#xff1a; ### 步骤 1: 创建拾取物品的基础类 1. 在 Content Browser 中创建一个新的 C 类&#xff0c;继承自 AActor 或者 AStaticMeshActor。…

VBA数据库解决方案第十四讲:如何在数据库中动态删除和建立数据表

《VBA数据库解决方案》教程&#xff08;版权10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…

数据增强在Sentence Transformers中的作用:提高句子评分任务的性能

Sentence Transformers 是一个强大的 Python 库&#xff0c;它基于 Transformer 模型架构&#xff0c;如 BERT、RoBERTa 和 XLM-RoBERTa 等&#xff0c;用于学习和操作句子级别的向量表示。这个库特别适合于处理自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;能够为…

RH850系列芯片深度剖析 1.7-启动流程解析

RH850系列芯片深度剖析 1.7-启动流程解析 文章目录 RH850系列芯片深度剖析 1.7-启动流程解析一、简介二、启动相关文件说明三、启动相关的段四、启动流程4.1 启动文件启动4.1.1 寄存器初始化4.1.2 时钟初始化4.1.3 模块Standby寄存器初始化4.1.4 启动从核4.1.5 硬件初始化4.1.5…

7个流行的开源数据治理工具

数字化时代&#xff0c;数据是已经成为最宝贵的资产之一。数据支撑着我们的政府、企业以及各类组织的所有流程&#xff0c;并为决策以及智能化服务提供支撑。大数据有大用途&#xff0c;但是也可能隐藏着巨大的风险&#xff0c;特别是如果我们对数据的情况不是很了解的时候&…