• RocketMQ(4)---RocketMQ核心配置讲解


    RocketMQ核心配置讲解

    RocketMQ的核心配置在broker.conf配置文件里,下面我们来分析下它。

    一、broker.conf配置

    下面只列举一些常用的核心配置讲解。

    1、broker.conf核心配置讲解

    # 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
    

    2、同步刷盘 or 异步刷盘

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

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

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

    两种策略

    同步刷盘:当数据成功写到内存中之后立刻刷盘(同步),在保证消息写到磁盘也成功的前提下返回写成功状态。

    异步刷盘 :数据写入内存后,直接返回成功状态。异步将内存中的数据持久化到磁盘上。

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

    同步刷盘

    优点:保证了数据的可靠性,保证数据不会丢失。

    缺点:同步刷盘效率较低,因为需要内存将消息写入磁盘后才返回成功状态。

    异步刷盘

    优点:异步刷盘可以提高系统的吞吐量。因为它仅仅是写入内存成功后,就返回成功状态。

    缺点:异步刷盘不能保证数据的可靠性。因为写入内存成功,但写入磁盘的时候因为某种原因写入失败,那就会丢失该条消息。

    3、同步复制 or 异步复制

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

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

    两种策略

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

    异步复制: 当数据成功写到内存中Master节点之后,直接返回成功状态,异步将Master数据存入Slave节点。

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

    同步复制 : 数据安全性高,性能低一点。

    异步复制 : 数据可能丢失,性能高一点。


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



    只要自己变优秀了,其他的事情才会跟着好起来(上将1)
    
  • 相关阅读:
    js 使用${}解析变量代替++
    laravel 返回自定义错误
    Java集合之HashMap源码解析
    Java集合之ArrayList源码解析
    Java集合之LinkedList源码解析
    保证消息可靠性传输以及幂等性
    Java分布式系统---消息中间件
    Java中的日期与时间
    Java时区问题
    数据测试002:利用Jmeter推送测试数据(上)
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/11116197.html
Copyright © 2020-2023  润新知