RocketMQ(二) 集群配置

相关概念

NameServer

这里我们可以理解成类似于zk的一个注册中心,而且rocketmq最初也是基于zk作为注册中心的,现在相当于为rocketmq自定义了一个注册中心,代码不超过1000行。RocketMQ 有多种配置方式可以令客户端找到 Name Server, 然后通过 Name Server 再找到 Broker,分别如下,优先级由高到低,高优先级会覆盖低优先级。客户端提供http和ip:端口号的两种方式,推荐使用http的方式可以实现nameserver的热部署。

Push Consumer

Consumer 的一种,应用通常通过 Consumer 对象注册一个 Listener 接口,一旦收到消息,Consumer 对象立刻回调 Listener 接口方法,类似于activemq的方式

Pull Consume

Consumer 的一种,应用通常主动调用 Consumer 的拉消息方法从 Broker 拉消息,主动权由应用控制

Producer Group

一类producer的集合名称,这类producer通常发送一类消息,且发送逻辑一致

Consumer Group

同上,consumer的集合名称

Broker

消息中转的角色,负责存储消息(实际的存储是调用的store组件完成的),转发消息,一般也成为server,同jms中的provider

Message Filter

可以实现高级的自定义的消息过滤

Master/Slave

集群的主从关系,broker的name相同,brokerid=0的为主master,大于0的为从slave,可以一主多从,但一从只能有一主

RocketMQ角色介绍

RocketMQ由四部分构成:Producer、Consumer、Broker和NameServer

启动顺序:NameServer->Broker

rocketmq架构图

在这里插入图片描述

RocketMQ的使用

下载

RocketMQ的下载地址http://rocketmq.apache.org/release_notes/release-notes-4.4.0/

配置环境变量

在这里插入图片描述
在这里插入图片描述

集群部署方式

单Master模式

优点:配置简单,方便部署

缺点:这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用,不建议线上环境使用

多Master模式

优点: 配置简单,一个Master宕机重启不会有什么影响

缺点: 单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅

多Master多Slave模式(异步复制)

一个Master配置一个Slave,有多对Master-Slave,采用的异步的方式
,可以一主多从,但一从只能有一主

优点: 即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master 宕机后,消费者仍然可以从 Slave消费,此过程对应用透明。不需要人工干预。性能同多 Master 模式几乎一样。

缺点: Master 宕机,磁盘损坏情况,会丢失少量消息。

多Master多Slave模式(同步双写)

同多 master 多 slave 异步复制模式类似,区别在于 master 和 slave 之间的数据同步方式。

优点:同步双写的同步模式能保证数据不丢失。
缺点:发送单个消息 RT 会略长,性能相比异步复制低10%左右。
刷盘策略:同步刷盘和异步刷盘(指的是节点自身数据是同步还是异步存储)
同步方式:同步双写和异步复制(指的一组 master 和 slave 之间数据的同步)

在这里插入图片描述

开始搭建

修改broker-a.properties内容

	#所属集群名字
    brokerClusterName=rocketmq-cluster
    #broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
    brokerName=broker-a
    #0 表示 Master,>0 表示 Slave
    brokerId=0
    #nameServer地址,分号分割
    namesrvAddr=localhost:9876;localhost:9877
    #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    defaultTopicQueueNums=4
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #Broker 对外服务的监听端口,
    listenPort=10910
    #删除文件时间点,默认凌晨 4点
    deleteWhen=04
    #文件保留时间,默认 48 小时
    fileReservedTime=120
    #commitLog每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
    #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    mapedFileSizeConsumeQueue=300000
    #destroyMapedFileIntervalForcibly=120000
    #redeleteHangedFileInterval=120000
    #检测物理文件磁盘空间
    diskMaxUsedSpaceRatio=88
    #存储路径
    storePathRootDir=C:\Users\Tang\Desktop\path\broker-a\RootDir
    #commitLog 存储路径
    storePathCommitLog=C:\Users\Tang\Desktop\path\broker-a\CommitLog
    #消费队列存储路径存储路径
    storePathConsumeQueue=C:\Users\Tang\Desktop\path\broker-a\ConsumeQueue
    #消息索引存储路径
    storePathIndex=C:\Users\Tang\Desktop\path\broker-a\Index
    #checkpoint 文件存储路径
    storeCheckpoint=C:\Users\Tang\Desktop\path\broker-a\point
    #abort 文件存储路径
    abortFile=C:\Users\Tang\Desktop\path\broker-a\File
    #限制的消息大小
    maxMessageSize=65536
    #flushCommitLogLeastPages=4
    #flushConsumeQueueLeastPages=2
    #flushCommitLogThoroughInterval=10000
    #flushConsumeQueueThoroughInterval=60000
    #Broker 的角色
    #- ASYNC_MASTER 异步复制Master
    #- SYNC_MASTER 同步双写Master
    #- SLAVE
    brokerRole=ASYNC_MASTER
    #刷盘方式
    #- ASYNC_FLUSH 异步刷盘
    #- SYNC_FLUSH 同步刷盘
    flushDiskType=ASYNC_FLUSH
    #checkTransactionMessageEnable=false
    #发消息线程池数量
    #sendMessageThreadPoolNums=128
    #拉消息线程池数量
    #pullMessageThreadPoolNums=128

修改broker-a-b.properties内容

#所属集群名字
    brokerClusterName=rocketmq-cluster
    #broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
    brokerName=broker-a
    #0 表示 Master,>0 表示 Slave
    brokerId=1
    #nameServer地址,分号分割
    namesrvAddr=localhost:9876;localhost:9877
    #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
    defaultTopicQueueNums=4
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #Broker 对外服务的监听端口,
    listenPort=10920
    #删除文件时间点,默认凌晨 4点
    deleteWhen=04
    #文件保留时间,默认 48 小时
    fileReservedTime=120
    #commitLog每个文件的大小默认1G
    mapedFileSizeCommitLog=1073741824
    #ConsumeQueue每个文件默认存30W条,根据业务情况调整
    mapedFileSizeConsumeQueue=300000
    #destroyMapedFileIntervalForcibly=120000
    #redeleteHangedFileInterval=120000
    #检测物理文件磁盘空间
    diskMaxUsedSpaceRatio=88
    #存储路径
    storePathRootDir=C:\Users\Tang\Desktop\path\broker-a-s\RootDir
    #commitLog 存储路径
    storePathCommitLog=C:\Users\Tang\Desktop\path\broker-a-s\CommitLog
    #消费队列存储路径存储路径
    storePathConsumeQueue=C:\Users\Tang\Desktop\path\broker-a-s\ConsumeQueue
    #消息索引存储路径
    storePathIndex=C:\Users\Tang\Desktop\path\broker-a-s\Index
    #checkpoint 文件存储路径
    storeCheckpoint=C:\Users\Tang\Desktop\path\broker-a-s\point
    #abort 文件存储路径
    abortFile=C:\Users\Tang\Desktop\path\broker-a-s\File
    #限制的消息大小
    maxMessageSize=65536
    #flushCommitLogLeastPages=4
    #flushConsumeQueueLeastPages=2
    #flushCommitLogThoroughInterval=10000
    #flushConsumeQueueThoroughInterval=60000
    #Broker 的角色
    #- ASYNC_MASTER 异步复制Master
    #- SYNC_MASTER 同步双写Master
    #- SLAVE
    brokerRole=SLAVE
    #刷盘方式
    #- ASYNC_FLUSH 异步刷盘
    #- SYNC_FLUSH 同步刷盘
    flushDiskType=ASYNC_FLUSH
    #checkTransactionMessageEnable=false
    #发消息线程池数量
    #sendMessageThreadPoolNums=128
    #拉消息线程池数量
    #pullMessageThreadPoolNums=128

broker-b 与 broker-a的配置基本相同

修改配置文件

rocketmq默认自带了三种建议的配置

rocketmq-all-4.4.0-bin-release\conf 下我们可以看到

  • 2m-2s-async (2主2从异步)
  • 2m-2s-sync (2主2从同步)
  • 2m-noslave (2主)

我们这里搭建2主2从的模式,企业为了保证数据的不丢失使用的是2主2从 同步

注意事项

  1. autoCreateTopicEnable=true,建议线下开启测试,线上关闭
  2. listenPort默认为10911,当一个机器上启动多个broker示例时,需区分开端口
  3. brokerClusterName 配置集群名字必须相同
  4. namesrvAddr 配置的时候 有多少个nameSev就写多少个,用";"号隔开.
  5. broker启动时,默认内存设置比较大,改成适合机器的,细节看下面
  6. 当一个节点启动多个broker实例时,存储路径如果显示的设置,则需要指定不同的storePath路径,(不设置的话,默认不同)
  7. brokerName 设置的时候 主broker需要和从broker相同
  8. brokerId 设置的时候 主设置为0 ,从设置为1,2,3…(有多少从设置多少)

需求内存太大

默认大小

-Xms8g -Xmx8g -Xmn4g

改为:

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

该配置视环境情况而定,配置一定要在环境内存允许的情况下,否则启动会报错,本地虚拟机配置很多问题都出在这一步

启动mqnamesrv.cmd(这里是有一台主机上)

启动第一个mqnamesrv 我们可以使用默认的端口地址:9876

启动第二个mqnamesrv 我们需要创建mqnamesrv的配置文件(namesrv.properties)

在这里插入图片描述

启动命令

格式: mqnamesrv -c 配置文件

例如:

F:\rocketmq-all-4.4.0-bin-release\bin\mqnamesrv -c F:\rocketmq-all-4.4.0-bin-release\conf\namesrv.properties

启动broker(2主2从)

在这里插入图片描述
在这里插入图片描述

启动命令

格式: mqbroker -c 配置文件

例如

F:\rocketmq-all-4.4.0-bin-release\bin\mqbroker -c F:\rocketmq-all-4.4.0-bin-release\conf\2m-2s-async\broker-a.properties

启动结果

在这里插入图片描述

成功开启

可视化界面查看效果

下载地址:https://github.com/apache/rocketmq-externals

进入到 rocketmq-console

文件夹下,执行如下命令:

mvn clean package -Dmaven.test.skip=true

执行完之后启动

java -jar target/rocketmq-console-ng-1.0.1.jar --server.port=8888 --rocketmq.config.namesrvAddr=localhost:9876;localhost:9877

在这里插入图片描述

或者修改application.properties文件

在这里插入图片描述
在这里插入图片描述

启动

java -jar target/rocketmq-console-ng-1.0.1.jar

测试

成功了(累死了)

在这里插入图片描述

发布了56 篇原创文章 · 获赞 3 · 访问量 4418

猜你喜欢

转载自blog.csdn.net/Tang_5253/article/details/102710906