设为首页收藏本站

追梦Linux

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 124|回复: 0

RocketMQ介绍、配置部署

[复制链接]

482

主题

485

帖子

16万

积分

CEO

Rank: 9Rank: 9Rank: 9

积分
167914

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2018-8-16 16:39:08 | 显示全部楼层 |阅读模式
RocketMQ介绍
[AppleScript] 纯文本查看 复制代码
RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。具有以下特性:
支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型
在一个队列中可靠的先进先出(FIFO)和严格的顺序传递
支持拉(pull)和推(push)两种消息模式
单一队列百万消息的堆积能力
支持多种消息协议,如 JMS、MQTT 等
分布式高可用的部署架构,满足至少一次消息传递语义
提供 docker 镜像用于隔离测试和云集群部署
提供配置、指标和监控等功能丰富的 Dashboard


相关术语
Producer:消息生产者,生产者的作用就是将消息发送到 MQ,生产者本身既可以产生消息,如读取文本信息等。也可以对外提供接口,由外部应用来调用接口,再由生产者将收到的消息发送到 MQ。

Producer Group:生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组。在这里可以不用关心,只要知道有这么一个概念即可。

Consumer:消息消费者,简单来说,消费 MQ 上的消息的应用程序就是消费者,至于消息是否进行逻辑处理,还是直接存储到数据库等取决于业务需要。

Consumer Group:消费者组,和生产者类似,消费同一类消息的多个 consumer 实例组成一个消费者组。

Topic:Topic 是一种消息的逻辑分类,比如说你有订单类的消息,也有库存类的消息,那么就需要进行分类,一个是订单 Topic 存放订单相关的消息,一个是库存 Topic 存储库存相关的消息。

Message:Message 是消息的载体。一个 Message 必须指定 topic,相当于寄信的地址。Message 还有一个可选的 tag 设置,以便消费端可以基于 tag 进行过滤消息。也可以添加额外的键值对,例如你需要一个业务 key 来查找 broker 上的消息,方便在开发过程中诊断问题。

Tag:标签可以被认为是对 Topic 进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。
Broker:Broker 是 RocketMQ 系统的主要角色,其实就是前面一直说的 MQ。Broker 接收来自生产者的消息,储存以及为消费者拉取消息的请求做好准备。
Name Server:Name Server 为 producer 和 consumer 提供路由信息。

RocketMQ 架构

由这张图可以看到有四个集群,分别是 NameServer 集群、Broker 集群、Producer 集群和 Consumer 集群:
NameServer: 提供轻量级的服务发现和路由。 每个 NameServer 记录完整的路由信息,提供等效的读写服务,并支持快速存储扩展。
Broker: 通过提供轻量级的 Topic 和 Queue 机制来处理消息存储,同时支持推(push)和拉(pull)模式以及主从结构的容错机制。
Producer:生产者,产生消息的实例,拥有相同 Producer Group 的 Producer 组成一个集群。
Consumer:消费者,接收消息进行消费的实例,拥有相同 Consumer Group 的Consumer 组成一个集群。


简单说明一下图中箭头含义,从 Broker 开始,Broker Master1 和 Broker Slave1 是主从结构,它们之间会进行数据同步,即 Date Sync。同时每个 Broker 与NameServer 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 NameServer 中。

Producer 与 NameServer 集群中的其中一个节点(随机选择)建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Broker Master 建立长连接,且定时向 Broker 发送心跳。Producer 只能将消息发送到 Broker master,但是 Consumer 则不一样,它同时和提供 Topic 服务的 Master 和 Slave建立长连接,既可以从 Broker Master 订阅消息,也可以从 Broker Slave 订阅消息。
RocketMQ 集群部署模式
单 master 模式
也就是只有一个 master 节点,称不上是集群,一旦这个 master 节点宕机,那么整个服务就不可用,适合个人学习、开发测试环境。

多 master 模式
多个 master 节点组成集群,单个 master 节点宕机或者重启对应用没有影响。
优点:所有模式中性能最高
缺点:单个 master 节点宕机期间,未被消费的消息在节点恢复之前不可用,消息的实时性就受到影响。
注意:使用同步刷盘可以保证消息不丢失,同时 Topic 相对应的 queue 应该分布在集群中各个节点,而不是只在某各节点上,否则,该节点宕机会对订阅该 topic 的应用造成影响。

多 master 多 slave 异步复制模式
在多 master 模式的基础上,每个 master 节点都有至少一个对应的 slave。master节点可读可写,但是 slave 只能读不能写,类似于 mysql 的主备模式。
优点: 在 master 宕机时,消费者可以从 slave 读取消息,消息的实时性不会受影响,性能几乎和多 master 一样。
缺点:使用异步复制的同步方式有可能会有消息丢失的问题。

多 master 多 slave 同步双写模式
同多 master 多 slave 异步复制模式类似,区别在于 master 和 slave 之间的数据同步方式。
优点:同步双写的同步模式能保证数据不丢失。
缺点:发送单个消息 RT 会略长,性能相比异步复制低10%左右。
刷盘策略:同步刷盘和异步刷盘(指的是节点自身数据是同步还是异步存储)
同步方式:同步双写和异步复制(指的一组 master 和 slave 之间数据的同步)
注意:要保证数据可靠,需采用同步刷盘和同步双写的方式,但性能会较其他方式低。
RocketMQ 单主部署
参照官网:http://rocketmq.apache.org/docs/quick-start/
1、基础环境依赖
64bit OS, Linux/Unix/Mac;
64bit JDK 1.8+;
Maven 3.2.x
Git
2、安装这些依赖
我这里是ubuntu,其他系统类似
安装jdk1.8:
[AppleScript] 纯文本查看 复制代码
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
java -version

安装maven:
[AppleScript] 纯文本查看 复制代码
wget [url=http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz]http://mirrors.hust.edu.cn/apach ... en-3.5.4-bin.tar.gz[/url]
tar xf apache-maven-3.5.4-bin.tar.gz
mv apache-maven-3.5.4 /usr/local/maven
配置环境变量
export MAVEN_HOME=/usr/local/maven
export PATH=$MAVEN_HOME/bin:$PATH
mvn -version


git非必须安装:apt-get install git 即可
3、下载安装RocketMQ
官网最新:https://www.apache.org/dyn/close ... -source-release.zip
http://mirror.bit.edu.cn/apache/ ... -source-release.zip
unzip rocketmq-all-4.3.0-source-release.zip
cd rocketmq-all-4.3.0/
mvn -Prelease-all -DskipTests clean install -U
至此RocketMQ已经将源码编译成功

4、启动服务
打包完二进制包在distribution/target下,该目录下有apache-rocketmq及打包好的压缩包文件,官网给出的是到distribution/target/apache-rocketmq下去启动服务,但这样显得太麻烦,故单独把二进制包拿出来。
mv distribution/target/apache-rocketmq /usr/local/apache-rocketmq
通过conf下的配置文件可以看到,日志是保存在当前用户家目录的logs下,这样显得很不方便,故修改日志输出目录
配置环境变量export ROCKETMQ_HOME=/usr/local/apache-rocketmq
修改conf目录下的xml配置文件,并在ROCKETMQ_HOME创建一个logs目录
sed -i "s/user.home/ROCKETMQ_HOME/g" logback_broker.xml
sed -i "s/user.home/ROCKETMQ_HOME/g" logback_filtersrv.xml
sed -i "s/user.home/ROCKETMQ_HOME/g" logback_namesrv.xml
sed -i "s/user.home/ROCKETMQ_HOME/g" logback_tools.xml
[AppleScript] 纯文本查看 复制代码
启动Name Server:
nohup sh bin/mqnamesrv &
启动broker:
nohup sh bin/mqbroker -n localhost:9876 &
通过tail -f [color=#333333][font=-apple-system, "]/logs/rocketmqlogs/broker.log 查看日志[/font][/color]
[font=-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun][color=#333333]如果看到 "The broker[%s, 172.30.30.233:10911] boot success..." ,则表示启动成功
则打开 当前目录(apache-rocketmq)下的 nohup.out 日志文件查看,发现启动 Broker 失败:无法分配内存
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/local/apache-rocketmq/hs_err_pid7209.log
内存分配失败解决办法
这是因为 apache-rocketmq/bin 目录下启动 nameserv 与 broker 的 runbroker.sh 和 runserver.sh 文件中默认分配的内存太大,而系统实际内存却太小导致启动失败
通常像虚拟机上安装的 CentOS 服务器内存可能是没有高的,只能调小。实际中应该根据服务器内存情况,配置一个合适的值
找到下面的 runbroker.sh 和 runserver.sh 文件

把runserver.sh 、runbroker.sh 文件中 修改 JVM 配置下的第一行,启动内存最大内存调小
然后再次启动 broker 时就成功了,broker 注册到了 nameserver 上了 localhost:9876


[/color][/font]发送接收消息
export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
与启动顺序相反进行关闭,先关闭 broker、在关闭 nameserv
sh bin/mqshutdown broker
sh bin/mqshutdown nameserv


常用命令
[AppleScript] 纯文本查看 复制代码
除了上面几个命令之外,还有如下一些较常用的命令,ip请以实际为准:
查看集群情况: ./bin/mqadmin clusterList -n 127.0.0.1:9876
查看 broker 状态: ./bin/mqadmin brokerStatus -n 127.0.0.1:9876 -b   172.17.0.1:10911
查看 topic 列表: ./bin/mqadmin topicList -n 127.0.0.1:9876
查看 topic 状态: ./bin/mqadmin topicStatus -n 127.0.0.1:9876 -t MyTopic (换成想查询的 topic)
查看 topic 路由: ./bin/mqadmin topicRoute -n 127.0.0.1:9876 -t MyTopic







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

QQ|小黑屋|手机版|Archiver|追梦Linux ( 粤ICP备14096197号  点击这里给我发消息

GMT+8, 2018-12-16 23:54 , Processed in 0.343475 second(s), 33 queries .

Powered by 追梦Linux! X3.3 Licensed

© 2015-2017 追梦Linux!.

快速回复 返回顶部 返回列表