Rocketmq源码分析: Rocketmq push 模式下 consumeMessageBatchMaxSize 和 pullBatchSize 两个参数的意义

目的:  本篇文章主要是聊聊consumeMessageBatchMaxSize 和 pullBatchSize 两个参数在Rocketmq push模式的意义

 

  1.  首先第一次看到consumeMessageBatchMaxSize 和 pullBatchSize 两个参数的时候感觉有点模糊,很容易造成混淆,如果我们想把每个参数在生产环境中都设置的合理,最好还是把每个参数的实际意义搞清楚。
  2.  首先我们找到这两个参数所在类 rocketmq/client/src/main/java/org/apache/rocketmq/client/consumer/DefaultMQPushConsumer.java 

            Rocketmq源码分析: Rocketmq push 模式下 consumeMessageBatchMaxSize 和 pullBatchSize 两个参数的意义

            consumeMessageBatchMaxSize 就像注释表述的一样,批量消费的大小,也就是说当MQ消息从Broker拉取之后每次派发给我们每个消费类的大小,也许看到下图大家更容易理解些。

          Rocketmq源码分析: Rocketmq push 模式下 consumeMessageBatchMaxSize 和 pullBatchSize 两个参数的意义

          看到这里可能大家已经知道了consumeMessageBatchMaxSize 和我们消费类相关参数的对应关系,然后我们再继续看看consumeMessageBatchMaxSize 在Rocketmq 源码里具体的使用地方

         代码地址: org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService  ,具体代码接入如下:

         当从broker拉取的msgs的大小超过consumeMessageBatchMaxSize 的大小时,将会对消息进行拆分,然后提交到线程池进行处理,从这里我们也不难看到这个参数的意义,值越小越能更大化的利用多线程去执行。

         该参数默认值是1: 最大值是1024,这个具体设置多少会比较合适?这个还需要根据自己的业务来定,假如我们每个消息的处理耗时很长,那么这个参数就应该设置的偏小一点,不要让单个消息的消费慢影响同一批中的其他消息。

         Rocketmq源码分析: Rocketmq push 模式下 consumeMessageBatchMaxSize 和 pullBatchSize 两个参数的意义

 

  1. pullBatchSize:   回头我们再看看pullBatchSize 这个参数,这个参数代表每批次从broker拉取消息的最大个数,默认值是32.   代码如下:
  2. Rocketmq源码分析: Rocketmq push 模式下 consumeMessageBatchMaxSize 和 pullBatchSize 两个参数的意义