【RocketMq】RMQ开源版本Push消费模式为什么批量消费最大拉取数量是32?(MAC)

1 介绍: 由阿里巴巴开源

     Apache 基金会顶级项目 gitHub地址 https://github.com/apache/rocketmq 

2 本地安转运行MAC

上图步骤分别是:

1 namesrv 服务,启动前注意更改IDE的环境变量 ROCKETMQ_HOME,并将distribute module下的四个配置文件Copy到ROCKETMQ_HOME目录,修改conf文件如上图(三)黄色文字部分。

2 配置文件

3 conf文件,命名broker名字等相关配置

4 启动broker服务,注意上图(⑤)的参数配置

5 IDE 参数配置

6 运行quickstart的生产者

7 运行quickstart的消费者

8 查看运行日志

3 回到问题为啥消费者最大批量消费是32?

源码中的两个参数解释如下

    /**
     * Batch consumption size   客户端从broker一次拉取后,实际消费的最大数量 <= pullBatchSize
     */
    private int consumeMessageBatchMaxSize = 1;

    /**
     * Batch pull size  客户端从broker一次拉取最大数量 <= 服务端的实际参数限制
     */
    private int pullBatchSize = 32;

即最终决定批量最大数是由服务端控制;

服务端源码中:org.apache.rocketmq.store.DefaultMessageStore#isTheBatchFull 方法限制一次请求最大回传数量;

    private boolean isTheBatchFull(int sizePy, int maxMsgNums, int bufferTotal, int messageTotal, boolean isInDisk) {

        if (0 == bufferTotal || 0 == messageTotal) {
            return false;
        }

        if (maxMsgNums <= messageTotal) {
            return true;
        }

        if (isInDisk) {
            // maxTransferBytesOnMessageInDisk = 1024 * 64 磁盘字节数即64KB
            if ((bufferTotal + sizePy) > this.messageStoreConfig.getMaxTransferBytesOnMessageInDisk()) {
                return true;
            }

            // maxTransferCountOnMessageInDisk = 8 磁盘拉取条数
            if (messageTotal > this.messageStoreConfig.getMaxTransferCountOnMessageInDisk() - 1) {
                return true;
            }
        } else {
            // 默认1024 * 256,此处限制了内存中的字节数即 256KB
            if ((bufferTotal + sizePy) > this.messageStoreConfig.getMaxTransferBytesOnMessageInMemory()) {
                return true;
            }
             
            // maxTransferCountOnMessageInMemory 默认32,此处限制了条数
            if (messageTotal > this.messageStoreConfig.getMaxTransferCountOnMessageInMemory() - 1) {
                return true;
            }
        }

        return false;
    }

由源码可知,分别修改磁盘或者内存的条数以及字节数既可以影响返回给消费者的最大批量条数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自驱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值