laomao , Life is like a play

RocketMQ核心配置讲解(四)

默认分类 0 评

常见的核心配置

# nameServer地址,如果nameserver是多台集群的话,就用分号分割
namesrvAddr=172.1.21.29:9876;143.13.262.43:9876
# 所属集群名字(同一主从下:Master和slave名称要一致)
brokerClusterName=rocketmq-cluster
# broker名字,注意此处不同的配置文件填写的不一样  例如:在a.properties 文件中写 broker-a  在b.properties 文件中写 broker-b
brokerName=broker-a
# 0 表示 Master,>0 表示 Slave
brokerId=0
# Broker 对外服务的监听端口
listenPort=10911
# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数。由于是4个broker节点,所以设置为4
# defaultTopicQueueNums=4
# 是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
# 检测可用的磁盘空间大小,当磁盘被占用超过90%,消息写入会直接报错                    
diskMaxUsedSpaceRatio=90
# Broker 的角色: ASYNC_MASTER 异步复制Master ; SYNC_MASTER 同步双写Master; SLAVE
brokerRole=SYNC_MASTER
# 刷盘方式 ASYNC_FLUSH 异步刷盘; SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

同步刷盘 OR 异步刷盘

同步刷盘和异步刷盘指的是内存磁盘的关系
RocketMQ的消息最终是存储到磁盘上面的,这样既能保证服务器断电恢复后继续消费,又可以让存储的消息量超出内存的限制,从客户端发送消息,一开始先写到内存中,再刷到磁盘上

用户 - > 应用程序(常驻内存中) - > 磁盘

两种策略
同步刷盘:当数据成功写入到内存中立刻刷盘到磁盘中
优点:保证了数据的可靠性,保证数据不会丢失
缺点:同步刷盘效率低一些,应为需要将内存消息刷到磁盘中之后才返回成功状态

异步刷盘:当数据写入内存后,直接返回成功状态,异步将数据持久化到磁盘上
优点:效率高,提高了系统的吞吐量,因为写入内存后直接返回成功状态,无需等待数据刷到磁盘中
缺点:异步刷盘不能保证数据的可靠性,因为写入内存成功后就返回,但是写入磁盘的时候因为某种原因导致写入失败,那么就会造该条消息的丢失

同步复制 OR 异步复制

同步复制和异步复制指的是Master节点和Slave节点的关系
如果一个Broker组有Master(主)和Slave(从),消息需要从Master复制到Slave节点上一共有两种策略

同步复制:当数据成功写到内存中Master节点之后立刻同步复制到Slave中,当Slave节点同步完毕才返回成功状态
异步复制:当数据成功写到内存中Master节点之后立刻返回成功状态,异步同步到Slave节点中

两种模式优缺点和上面同步刷盘,异步刷盘相同,线上建议采用同步复制+异步刷盘

RocketMQ消息重试机制(五)
发表评论
撰写评论