RocketMQ系统性学习-RocketMQ领域模型及Linux下单机安装

欢迎关注公众号:【11来了】 发送 "资料" 可以下载Redis、JVM系列文章PDF版本!

作者为在读研究生,目前研二,计划在公众号记录学习常用中间件笔记,以及明年更新面试经历!

MQ 之间的对比

三种常用的 MQ 对比,ActiveMQ、Kafka、RocketMQ

性能方面:

  • 三种 MQ 吞吐量级别为:万,百万,十万
  • 消息发送时延:毫秒,毫秒,微秒
  • 可用性:主从,分布式,分布式

扩展性方面:

  • 水平伸缩能力:均支持
  • 技术栈:Java,Java/Scala,Java

功能维度方面:

  • 消息重试能力:均支持
  • 消息堆积能力:跟吞吐量成正相关,三种 MQ 分别为:弱,强,强
  • 消息过滤:支持,不支持,支持
  • 延迟消息:均支持
  • 消息回溯(用于消费者宕机恢复后,回溯到宕机前消费的位置):不支持,支持,支持

RocketMQ 领域模型

  • Topic:主题,可以理解为类别、分类的概念

  • MessageQueue:消息队列,存储数据的一个容器(队列索引数据),默认每个 Topic 下有 4 个队列被分配出来存储消息

  • Message:消息,真正携带信息的载体概念

  • Producer:生产者,负责发送消息

  • Consumer:消费者,负责消费消息

  • ConsumerGroup:众多消费者构成的整体或构成的集群,称之为消费者组

  • Subscription:订阅关系,消费者得知道自己需要消费哪个 Topic 下的哪个队列的数据

  • Message Queue:一个 Topic 下可以设置多个消息队列,发送消息的时候,RocketMQ 会轮询该 Topic 下的所有队列将消息发送出去(下图中 Broker 中 Topic 指向的 Q1、Q2、Q3、Q4 就是 MessageQueue)

  • Tag:对 Topic 的进一步细化

  • Broker:Broker 是 Rocket MQ 的主要角色,主要管理消息的存储、发送、查询等功能

  • Name Server:提供轻量级的服务发现,用于存储 Topic 和 Broker 关系信息

    主要功能:
    0. 接收 Broker 的注册,并提供心跳机制去检查 Broker 是否存活

    1. 路由管理,每个 nameserver 都有整个 Broker 集群的路由信息和客户端的查询队列

Rocket MQ 单机服务启动

RocketMQ 官方下载地址:rocketmq.apache.org/zh/download...

单机服务启动,选择二进制文件进行下载:

将二进制文件上传至服务器,进行解压:

python 复制代码
# 安装 unzip 命令
yum install unzip
# 解压
unzip rocketmq-all-5.1.4-bin-release.zip

修改 RocketMQ 的 JVM 配置

原本分配的 JVM 堆内存太大,如果启动时分配的内存不足就会报错,需要修改 bin 目录下的:runbroker.shrunserver.sh 文件:

runbroker.sh 文件修改后的内容如下图:

runserver.sh 文件修改后的内容如下图:

配置 broker.conf 文件

conf/broker.conf 文件中追加如下内容:

ini 复制代码
brokerIP1=【填服务器的公网 ip 地址】
namesrvAddr=localhost:9876

linux 安装 jdk 环境

rocketmq 是 java 写的,因此还需要安装 jdk 环境,并且有 JAVA_HOME 环境变量

安装 jdk 流程如下:

bash 复制代码
# 创建目录
mkdir /usr/lib/jvm
# 解压到 /usr/lib/jvm 目录下
tar -xvf jdk-8u144-linux-x64.tar.gz -C /usr/lib/jvm
# 配置环境变量,Linux 环境变量在 /etc/profile 中配置
vi /etc/profile
# 在结尾添加如下内容
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_144
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
​
# 激活修改的配置
source /etc/profile
# 检查安装的 jdk
java -version

开放防火墙端口

css 复制代码
# 开放防火墙 9876 和 10911 端口
firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --zone=public --add-port=10911/tcp --permanent
# 更新防火墙规则
firewall-cmd --reload
# 查看防火墙所有开放的端口
firewall-cmd --list-port

启动

bash 复制代码
# 1.启动 nameserver, nohup 和 & 可以让程序在后台运行
nohup sh bin/mqnamesrv &
# 查看日志,判断是否启动成功
tail ‐f ~/logs/rocketmqlogs/namesrv.log
# 2.启动 broker,-n 是 nameserver 的地址
nohup sh bin/mqbroker -c conf/broker.conf ‐n localhost:9876 &
# 下边这条命令在可以指定配置文件启动
# nohup sh bin/mqbroker -c conf/custom.conf ‐n localhost:9876 & autoCreateTopicEnable=true
# 查看日志,判断是否启动成功
tail ‐f ~/logs/rocketmqlogs/broker.log

启动后,使用 jps 查看是否启动成功:

关闭命令

bash 复制代码
sh bin/mqshutdown broker
sh bin/mqshutdown namesrv
相关推荐
千叶寻-3 小时前
正则表达式
前端·javascript·后端·架构·正则表达式·node.js
小咕聊编程4 小时前
【含文档+源码】基于SpringBoot的过滤协同算法之网上服装商城设计与实现
java·spring boot·后端
追逐时光者10 小时前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_10 小时前
敏捷开发流程-精简版
前端·后端
苏打水com11 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
间彧12 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧12 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧12 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧12 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧12 小时前
Spring Cloud Gateway详解与应用实战
后端