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

测试

成功了(累死了)

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
配置 RocketMQ 集群,请执行以下步骤: 1. 安装 Java 环境,并下载 RocketMQ 安装包。 2. 解压 RocketMQ 安装包,进入解压后的目录。 3. 在 conf 目录下创建两个配置文件:broker-a.properties 和 broker-b.properties。这两个文件分别对应两个不同的 Broker 实例。 4. 修改 broker-a.properties 和 broker-b.properties 文件的以下配置项: ``` brokerClusterName=MyCluster brokerName=broker-a 或 broker-b brokerId=0 或 1 namesrvAddr=192.168.1.100:9876;192.168.1.101:9876 ``` brokerClusterName集群名,需要保证唯一性。 brokerName:Broker 实例名,也需要保证唯一性。 brokerId:Broker 实例 ID,需要保证唯一性。 namesrvAddr:NameServer 地址,多个地址用分号隔开。 5. 复制 broker-a.properties 和 broker-b.properties 文件,分别重命名为 broker-a2.properties 和 broker-b2.properties。这两个文件对应的是 Broker 实例的备份。 6. 在 bin 目录下执行以下命令启动 Broker 实例: ``` nohup sh mqbroker -c ../conf/broker-a.properties & nohup sh mqbroker -c ../conf/broker-b.properties & nohup sh mqbroker -c ../conf/broker-a2.properties & nohup sh mqbroker -c ../conf/broker-b2.properties & ``` 7. 检查 Broker 实例的日志,确保它们启动成功。 8. 配置 Producer 和 Consumer,使用 NameServer 的地址进行消息发送和消费。 以上是简单的 RocketMQ 集群配置。如果需要更高的可用性和容错性,可以考虑使用主从模式或者多主模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值