RocketMQ 服务器下 的下载及安装

RocketMQ 的下载及安装
便于个人学习,做个人记录使用
原文 移步 RocketMQ 的下载及安装 - 风止雨歇 - 博客园
 

一、MQ的比较

KafkaRocketMQRabbitMQ
设计定位

系统间的数据管道,实时数据处理;

例如:收集日志、监控数据、网站活跃性跟踪、常规消息系统

非日志的可靠性消息传递;

例如:电商系统、订单、交易、消息推送、bin-log分发等

可靠消息传递;和 RocketMQ类似
成熟度日志领域成熟成熟成熟
开发语言ScalaJavaErlang
支持协议一套 自行设计的基于TCP的二进制协议自定义的一套AMQP
客户端语言C/C++、Python、Go、Erlang、Ruby等JavaJava、C++、Python、PHP等
持久化方式磁盘磁盘内存、文件
集群管理ZookeeperName server------
选主方式从 ISR 中选举一个 leader

不支持自动选主;

通过设定 broker name、broker Id 实现;borker name 相同,borker id=0 时为 master,其他为 slave

最早加入 集群的 Broker
可用性

非常高

分布式、主从

非常高

分布式、主从

主从,采用镜像模式实现,数据量大时可能产生性能瓶颈

主从切换

自动切换

N个副本,允许N-1个时效,master时效后自动从 ISR  中选择一个主

不支持自动切换

master 时效后不能向 master 发消息,消费者大概 30s 感知到此事件,此后从 slave 消费;如果 master 无法恢复,异步复制时可能出现部分信息丢失

自动切换

最早加入的集群的节点为master;因为新加入的 slave 不会同步 master 之前的数据,所以可能出现部分数据丢失

数据可靠性

很好

支持生成者单条发送、同步刷盘、同步复制,但是这种场景下性能明显下降

很好

生成者单条发送,broker同步刷盘、异步刷盘、 同步双写,异步复制

生产者支持同步 / 异步ACK;支持队列数据持久化,镜像模式中支持主从同步

消息写入性能

非常好

每条10个字节测试:百万条/s;

很好

每条10个字节测试:单机单borker约7w/s,单机3borker约12w/s

RAM 约为 RocketMQ的 1/2;

Disk性能约为RokcetMQ的 1/3;

性能稳定性

队列/分区 多时性能不稳定,明显下降;

消息堆积时性能稳定;

当单机的 topic 的数量超过 64 个,则性能下降特别厉害;

队列较多、消息堆积时性能稳定;

单机的 队列数量支持 5w,topic 的增加不影响性能;

消息堆积时性能不稳定,明显下降

复制备份

消息先写入 leader 的 log,follwers 从 leader 中 pull 到数据以后先 ACK leader,再写入 log;

ISR 维护与 leader 同步的列表,落后太多的 follwer 被删除掉

同步双写

异步复制:slave 启动线程从 master 中拉数据

普通模式下不复制

镜像模式下:消息先到master,然后写入到 slave 上;入集群之前的消息不会被复制到新的 slave 上

消息投递实时性

毫秒级

具体由消费者轮询间隔时间决定

毫秒级

支持pull、push两种模式、延时通常在毫秒级

毫秒级
顺序消费

支持顺序消费

但是一台broker宕机后,就会产生消息乱序

支持顺序消费

在顺序消费场景下,消费失败时消费队列将会暂停

支持顺序消费

但是如果一个消息消费失败哦,此消息的顺序将会被打乱

定时消息

不支持

开源版本仅支持定时 Level

不支持

事务消息不支持支持不支持
Broker端消息过滤不支持

支持

通过 tag 过滤,类似于 topic

不支持
消息查询不支持

支持

根据 messageId 查询

支持根据 mesageKey 查询消息

不支持
消息失败重试

不支持失败重试

offset存储在consumer中,无法保证

支持失败重试

offset 存储在 broker 中

支持失败重试
消息重新消费

支持通过修改 offset 来重新消费

支持按照时间来重新消费

发送端负载均衡可自由指定可自由指定需要单独 LoadBanlance
消费方式consumer pullconsumer pull / broker push broker push
批量发送

支持

默认 producer 缓存、压缩,然后批量发送

不支持不支持
消息清理指定文件保存时间,过期删除指定文件保存时间,过期删除默认可用内存少于40%,触发GC,GC时找到两个相同的文件,合并right到left
访问权限控制类似于数据库,需要配置用户名和密码
管理后台官网不提供;第三方开源管理工具可供使用官网提供;rocketmq-dashboard官网提供;rabbitmq-admin
管理后台的功能

Kafka Web Conslole

Broker列表;Kafka集群中 Topic列表;

Cluster、Topic、Connection、NameServer、MessageBroker、Offset、ConsumerOverView、Conections、channels、exchanges、queues、admin
优点

1、高吞吐、低延迟、高可用、集群热扩展、集群容错上由很好的表现;

2、producer 端提供缓存、压缩功能,可节省性能,提高效率;

3、提供顺序消费能力;

4、提供多种客户端语言;

5、生态完善,在大数据处理方面有大量配套的设施;

1、在高吞吐、低延迟、高可用上有非常好的表现;消息堆积时,性能也好;

2、api、系统设计都更加适合在业务处理场景;

3、支持多种消费方式;

4、支持 Broker 消息过滤;

5、支持事务;

6、提供消息顺序消费能力;Consumer 可以水平扩展,消费能力很强;

7、集群规模在 50 台左右,单日处理消息上百亿;经历过大数据量的考验,比较稳定可靠;

1、在高吞吐量、高可用较前俩者有所不如;

2、支持多种客户端语言;支持AMQP协议;

3、由于 Erlang 语言的特性,性能也比较好;使用 RAM 模式时,性能很好;

4、管理界面较丰富,在互联网公司也有较大规模的应用;

缺点

1、消费集群数目受到分区数目的限制;

2、单机topic多时,性能会明显降低;

3、不支持事务;

1、相比于 Kafka,使用者较少,生态不够完善;消费堆积、吞吐率上也有所不如;

2、不支持主从自动切换,master 时效后,消费者要一定时间才能感知;

3、客户端只支持Java;

1、Erlang 语言难度较大;集群不支持动态扩展;

2、不支持事务、消息吞吐能力有限;

3、消息堆积时,性能明显下降;

二、RocketMQ 的安装

1、 下载 RocketMQ 的包;

1

wget https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip --no-check-certificate

  

2、 解压缩

1

unzip rocketmq-all-4.9.4-bin-release.zip

  

3、配置环境变量

1

2

3

4

5

vim /etc/profile

# 在文件末尾添加以下内容:

export ROCKETMQ_HOME=/usr1/rocketmq

export PATH=$ROCKETMQ_HOME/bin:$PATH

  

4、修改完后,让环境变量立即生效

1

source /etc/profile

  

5、修改 RocketMQ 使用的内存

rocketmq需要启动两个服务:

  • name server:默认配置JVM使用的内存是4G;
  • broker:默认配置JVM使用的内存是8G, 内存设置的过大,可能导致开发环境中内存不足,服务无法启动,可以通过适当降低两个服务的内存解决.

  早期rocketmq使用的注册中心是zookeeper, 但由于它包含的功能过于强大, 而rocketmq使用zookeeper包含的内容过于丰富,导致我们在使用时往往需要搭建zookeeper的服务,以致后来rocketmq自己开发了符合自己应用场景的注册服务,name server和broker;

(1)修改name server内存256m;

1

2

3

4

5

6

7

8

9

10

cd  /usr1/rocketmq/bin

# 编辑 runserver.sh

vim runserver.sh

# 找到文件中下面这一行:

JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

# 将 -Xms4g -Xmx4g -Xmn2g 修改为 -Xms256m -Xmx256m -Xmn128m

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

(2)修改broker内存256m;

1

2

3

4

5

6

7

8

# 编辑 runbroker.sh

vim runbroker.sh

# 找到文件中下面这一行:

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"

# 将 -Xms8g -Xmx8g -Xmn4g 修改为 -Xms256m -Xmx256m -Xmn128m

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

6、启动RocketMQ

(1)先启动name server;

1

2

3

4

5

6

7

8

# 进入 rocketmq的 bin 目录

cd /usr1/rocketmq/bin/

# 启动 name server

nohup sh mqnamesrv &

# 查看运行日志, 看到"The Name Server boot success."表示启动成功

tail -f nohup.out

(2)再启动broker;

1

2

3

4

5

6

7

8

9

10

11

# 然后我们需要找到编辑 conf/broker.conf

vim /usr1/rocketmq/conf/broker.conf

# 加入一个配置,自动创建 topic:

autoCreateTopicEnable=true<br># 配置IP<br>brokerIPl=192.168.172.20 

# 启动 broker, 并连接到name server;localhost:9876

cd /usr1/rocketmq/bin/

nohup sh mqbroker -n localhost:9876 &

# 查看运行日志, 看到"The broker[......:10911] boot success."表示启动成功

tail -f nohup.out

 Broker的配置说明:

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

# rocketmq-name服务地址,多个地址用;分开,不配置默认为localhost:9876

namesrvAddr = 192.168.241.198:9876;192.168.241.199:9876

# 可以配置成自己需要的名称

brokerClusterName = DefaultCluster

# 搭建集群的时候 Master 和 Slave 的 brokerName 要配置的一样

brokerName = broker-b

# brokeId=0,表示为 Master 节点;所有的 非0 节点都为 Slave

brokerId = 0

# 每天的凌晨 4 点删除消息

deleteWhen = 04

# 数据存在磁盘上最多 48 小时

fileReservedTime = 48

# 当前节点角色;消息同步到Slave之后再响应

brokerRole = SYNC_MASTER

# 刷盘的策略;

# 同步刷盘:消息写到缓冲区之后,立刻通知线程去进行刷盘,刷盘成功之后再响应成功;

# 异步刷盘,消息先写到缓冲区之后,缓冲区的大小到达指定的保准之后去通知线程进行刷盘;异步刷盘可能造成数据丢失;

flushDiskType = ASYNC_FLUSH

# 自动创建 topic

autoCreateTopicEnable=true

# broker通信端口,默认端口

listenPort=10911

storePathRootDir=/root/rocketmq/store-m

storePathCommitLog=/root/rocketmq/store-m/store/commitlog

  

7、命令行快速验证

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

​ 在RocketMQ的安装包中,提供了一个tools.sh工具可以用来在命令行快速验证RocketMQ服务。我们在worker2上进入RocketMQ的安装目录:

首先需要配置一个环境变量NAMESRV_ADDR指向我们启动的NameServer服务。

export NAMESRV_ADDR='localhost:9876'

然后启动消息生产者发送消息:默认会发1000条消息

bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

我们可以看到发送消息的日志:

.....

SendResult [sendStatus=SEND_OK, msgId=C0A8E88007AC3764951D891CE9A003E7, offsetMsgId=C0A8E88000002A9F00000000000317BF, messageQueue=MessageQueue [topic=TopicTest, brokerName=worker1, queueId=1], queueOffset=249]

14:59:33.418 [NettyClientSelector_1] INFO  RocketmqRemoting - closeChannel: close the connection to remote address[127.0.0.1:9876] result: true

14:59:33.423 [NettyClientSelector_1] INFO  RocketmqRemoting - closeChannel: close the connection to remote address[192.168.232.128:10911] result: true

这日志中,上面部分就是我们发送的消息的内容。后面两句标识消息生产者正常关闭。

然后启动消息消费者接收消息:

bin/tools.sh  org.apache.rocketmq.example.quickstart.Consumer

启动后,可以看到消费到的消息。

......

ConsumeMessageThread_19 Receive New Messages: [MessageExt [brokerName=worker1, queueId=2, storeSize=203, queueOffset=53, sysFlag=0, bornTimestamp=1606460371999, bornHost=/192.168.232.128:43436, storeTimestamp=1606460372000, storeHost=/192.168.232.128:10911, msgId=C0A8E88000002A9F000000000000A7AE, commitLogOffset=42926, bodyCRC=1968636794, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=250, CONSUME_START_TIME=1606460450150, UNIQ_KEY=C0A8E88007AC3764951D891CE41F00D4, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 50, 49, 50], transactionId='null'}]]

日志中MessageExt后的整个内容就是一条完整的RocketMQ消息。我们要对这个消息的结构有个大概的了解,后面会对这个消息进行深入的理解。

其中比较关键的属性有:brokerName,queueId,msgId,topic,cluster,tags,body,transactionId。先找下这些属性在哪里。

而这个Consume指令并不会结束,他会继续挂起,等待消费其他的消息。我们可以使用CTRL+C停止该进程。

8、关闭RocketMQ服务

1

2

3

4

5

6

要关闭RocketMQ服务可以通过mqshutdown脚本直接关闭

# 1.关闭NameServer

sh bin/mqshutdown namesrv

# 2.关闭Broker

sh bin/mqshutdown broker

三、安装 RocketMQ-Dashboard

1、将代码下载下来,下载地址

1

https://github.com/apache/rocketmq-dashboard

2、解压之后,执行 mvn 进行打包;

1

mvn clean package -Dmaven.test.skip=true

3、运行 jar 包

1

nohup java -jar rocketmq-dashboard-1.0.0.jar --server.port=8080 --rocketmq.config.namesrvAddr=localhost:9876 &

4、访问管理界面

http://192.168.172.20:8080

四、集群搭建

Broker 的配置说明:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# rocketmq-name服务地址,多个地址用;分开,不配置默认为localhost:9876

namesrvAddr = 192.168.241.198:9876;192.168.241.199:9876<br>

# 可以配置成自己需要的名称

brokerClusterName = DefaultCluster<br><br># 搭建集群的时候 Master 和 Slave 的 brokerName 要配置的一样

brokerName = broker-b<br>

# brokeId=0,表示为 Master 节点;所有的 非0 节点都为 Slave

brokerId = 0<br><br># 每天的凌晨 4 点删除消息

deleteWhen = 04<br><br># 数据存在磁盘上最多 48 小时

fileReservedTime = 48<br>

# 当前节点角色;消息同步到Slave之后再响应

brokerRole = SYNC_MASTER<br><br># 刷盘的策略;<br># 同步刷盘:消息写到缓冲区之后,立刻通知线程去进行刷盘,刷盘成功之后再响应成功;<br># 异步刷盘,消息先写到缓冲区之后,缓冲区的大小到达指定的保准之后去通知线程进行刷盘;异步刷盘可能造成数据丢失;

flushDiskType = ASYNC_FLUSH<br><br># 自动创建 topic

autoCreateTopicEnable=true<br>

# broker通信端口,默认端口

listenPort=10911

storePathRootDir=/root/rocketmq/store-m

storePathCommitLog=/root/rocketmq/store-m/store/commitlog

  准备2个虚拟机分别是虚拟机centos-node-01与centos-node-02,分别部署2个NameServer,并在每台机器上分别启动一个Master和一个Slave,互为主备,在主目录下的conf文件夹下提供了多种broker配置模式,分别有:2m-2s-async,2m-2s-sync,2m-noslave,可以以此为模版做如下配置:

1

2

3

cd conf目录

cp broker.conf broker-m.conf

cp broker.conf broker-s.conf

1、配置192.168.241.198 Master和Slave

Master broker-m.conf配置如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#rocketmq-name服务地址,多个地址用;分开,不配置默认为localhost:9876

namesrvAddr = 192.168.241.198:9876;192.168.241.199:9876

#可以配置成自己需要的名称

brokerClusterName = DefaultCluster

brokerName = broker-b

# 0表示主节点

brokerId = 0

deleteWhen = 04

fileReservedTime = 48

#当前节点角色

brokerRole = SYNC_MASTER

flushDiskType = ASYNC_FLUSH

autoCreateTopicEnable=true

#broker通信端口,默认端口

listenPort=10911

storePathRootDir=/root/rocketmq/store-m

storePathCommitLog=/root/rocketmq/store-m/store/commitlog

Slave broker-s.conf配置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#rocketmq-name 服务地址,多个地址用;分开,不配置默认为localhost:9876

namesrvAddr = 192.168.241.198:9876;192.168.241.199:9876

#可以配置成自己需要的名称

brokerClusterName = DefaultCluster

brokerName = broker-b

# 非0表示从节点

brokerId = 1

deleteWhen = 04

fileReservedTime = 48

#当前节点角色

brokerRole = SLAVE

flushDiskType = ASYNC_FLUSH

autoCreateTopicEnable=true

#broker通信端口

listenPort=10811

storePathRootDir=/root/rocketmq/store-s

storePathCommitLog=/root/rocketmq/store-s/store/commitlog

启动mqnamesrv

1

nohup sh mqnamesrv &

  

启动broker Master

1

2

cd 到rocketmq根目录执行命令

nohup sh bin/mqbroker -c conf/broker-m.conf &

启动broker Slave

1

2

cd 到rocketmq根目录执行命令

nohup sh bin/mqbroker -c conf/broker-s.conf &

  

2、配置192.168.241.199 Master和Slave

Master broker-m.conf配置如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

namesrvAddr = 192.168.241.198:9876;192.168.241.199:9876

#可以配置成自己需要的名称

brokerClusterName = DefaultCluster

brokerName = broker-a

brokerId = 0

deleteWhen = 04

fileReservedTime = 48

brokerRole = SYNC_MASTER

flushDiskType = ASYNC_FLUSH

autoCreateTopicEnable=true

listenPort=10911

storePathRootDir=/root/rocketmq/store-m

storePathCommitLog=/root/rocketmq/store-m/store/commitlog

slave broker-s.conf配置如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

namesrvAddr = 192.168.241.198:9876;192.168.241.199:9876

#可以配置成自己需要的名称

brokerClusterName = DefaultCluster

brokerName = broker-a

brokerId = 1

deleteWhen = 04

fileReservedTime = 48

brokerRole = SLAVE

flushDiskType = ASYNC_FLUSH

autoCreateTopicEnable=true

listenPort=10811

storePathRootDir=/root/rocketmq/store-s

storePathCommitLog=/root/rocketmq/store-s/store/commitlog

启动mqnamesrv 与 mqbroker 启动流程同上。

集群启动后

1

2

# 查看集群监控状态

sh mqadmin clusterlist -n 192.168.241.198:9876

测试

1

2

3

4

5

export NAMESRV_ADDR=192.168.241.198:9876;192.168.241.199:9876

测试发送端

 > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

测试消费端

 > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

配置说明

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

1.namesrvAddr

NameServer地址,可以配置多个,用逗号分隔;

2.brokerClusterName

所属集群名称,如果节点较多可以配置多个

3.brokerName

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

4.brokerId

0表示Master,大于0表示不同的slave

5.deleteWhen

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

6.fileReservedTime

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

7.brokerRole

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

8.flushDiskType

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

9.listenPort

启动监听的端口号

10.storePathRootDir

存储消息的根目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装RocketMQ需要进行一系列步骤,请按照以下步骤进行: 1. 下载RocketMQ:在你的Linux服务器下载RocketMQ安装包。你可以在RocketMQ的官方网站(https://rocketmq.apache.org/)上找到最新版本的下载链接。 2. 解压安装包:将下载安装包解压到你希望安装RocketMQ的目录中。 ``` tar -zxvf rocketmq-all-x.x.x.tar.gz ``` 3. 配置环境变量:编辑 `/etc/profile` 文件,添加以下内容: ``` export ROCKETMQ_HOME=/path/to/rocketmq export PATH=$ROCKETMQ_HOME/bin:$PATH ``` 然后保存文件并执行以下命令使环境变量生效: ``` source /etc/profile ``` 4. 配置RocketMQ:进入RocketMQ安装目录,编辑 `conf/broker.conf` 和 `conf/namesrv.conf` 文件,根据你的需求进行配置。主要包括监听地址、存储路径、内存大小等。 5. 启动Name Server:在RocketMQ安装目录下执行以下命令启动Name Server: ``` nohup sh bin/mqnamesrv & ``` 6. 启动Broker:在RocketMQ安装目录下执行以下命令启动Broker: ``` nohup sh bin/mqbroker -n localhost:9876 & ``` 这里的 `localhost:9876` 是Name Server的地址,默认端口为9876。你可以根据你的实际配置进行修改。 7. 验证安装:通过命令行或者RocketMQ提供的管理工具,如RocketMQ Console,来验证RocketMQ安装和配置是否成功。 这些是基本的安装步骤,具体的安装和配置细节可能会根据不同的操作系统和RocketMQ版本而有所不同。请参考RocketMQ的官方文档以获取更详细的安装指南和配置说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值