#broker集群名称,用于划分broker
brokerClusterName=MQCluster001
#broker名称,用于主从配对,相同名称的broker才能做主从设置
brokerName=mq_broker_1
#用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
#Master节点设置
brokerId=0
#Slave节点设置
#brokerId=1
#name server服务器地址及端口,可以是多个,分号隔开
namesrvAddr=192.168.1.100:9876
#创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
defaultTopicQueueNums=8
#是否自动创建默认topic,生产需保持关闭
autoCreateTopicEnable=true
#是否自动创建topic的订阅组,默认开启
autoCreateSubscriptionGroup=true
#broker服务监听端口
listenPort=10911
#未消费的持久化消息清理时间点
deleteWhen=04
#持久化消息保存周期(单位:小时),超过该周期将被清理
fileReservedTime=24
#单个commitLog文件的大小限制(单位:字节)
mapedFileSizeCommitLog=1073741824
#单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20)
mapedFileSizeConsumeQueue=8000000
#存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
diskMaxUsedSpaceRatio=88
#持久化消息存储根路径
storePathRootDir=/data/store
#commitLog文件存储路径
storePathCommitLog=/data/store/commitlog
#最大消息大小限制(单位:字节)
maxMessageSize=65536
#commitLog最少刷盘page数
flushCommitLogLeastPages=4
#consumeQueue最少刷盘page数
flushConsumeQueueLeastPages=2
#commitLog刷盘间隔时间
flushCommitLogThoroughInterval=10000
#consumeQueue刷盘间隔时间
flushConsumeQueueThoroughInterval=60000
#处理消息发送线程池大小
sendMessageThreadPoolNums=128
#处理消息拉取线程池大小
pullMessageThreadPoolNums=128
#broker角色(SYNC_MASTER:同步双写Master、ASYNC_MASTER:异步复制Master、SLAVE:Slave)
brokerRole=ASYNC_MASTER
#Slave节点设置
#brokerRole=SLAVE
#刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
flushDiskType=ASYNC_FLUSH

2、同步刷盘 or 异步刷盘

同步刷盘和异步刷盘指的是 内存和磁盘 的关系。

RocketMQ的消息最终是是存储到磁盘上的,这样既能保证断电后恢复,又可以让存储的消息量超出内存的限制。

从客户端发送消息,一开始先写到内存,再写到磁盘上。如下图所示

rocketmq docker jvm 配置 rocketmq配置文件_写到内存


两种策略

  • 同步刷盘:当数据成功写到内存中之后立刻刷盘(同步),在保证消息写到磁盘也成功的前提下返回写成功状态。
  • 异步刷盘 :数据写入内存后,直接返回成功状态。异步将内存中的数据持久化到磁盘上。

同步刷盘和异步输盘的优劣

  • 同步刷盘
  • 优点:保证了数据的可靠性,保证数据不会丢失。
  • 缺点:同步刷盘效率较低,因为需要内存将消息写入磁盘后才返回成功状态。
  • 异步刷盘
  • 优点:异步刷盘可以提高系统的吞吐量。因为它仅仅是写入内存成功后,就返回成功状态。
  • 缺点:异步刷盘不能保证数据的可靠性。因为写入内存成功,但写入磁盘的时候因为某种原因写入失败,那就会丢失该条消息。

3、同步复制 or 异步复制

同步复制和异步复制指的是 Master节点和slave节点 的关系。

如果一个Broker组有Master和Slave,消息需要从Master复制到Slave上

rocketmq docker jvm 配置 rocketmq配置文件_写到内存_02


两种策略

  • 同步复制: 当数据成功写到内存中Master节点之后立刻同步到Slave中,当Slave也成功的前提下返回写成功状态。
  • 异步复制: 当数据成功写到内存中Master节点之后,直接返回成功状态,异步将Master数据存入Slave节点。

同步复制和异步复制的优劣:

  • 同步复制 : 数据安全性高,性能低一点。
  • 异步复制 : 数据可能丢失,性能高一点。

建议 线上采用 同步复制 + 异步刷盘;

rocketmq docker jvm 配置 rocketmq配置文件_数据_03