目的: 本篇文章主要是聊聊consumeMessageBatchMaxSize 和 pullBatchSize 两个参数在Rocketmq push模式的意义
- 首先第一次看到consumeMessageBatchMaxSize 和 pullBatchSize 两个参数的时候感觉有点模糊,很容易造成混淆,如果我们想把每个参数在生产环境中都设置的合理,最好还是把每个参数的实际意义搞清楚。
- 首先我们找到这两个参数所在类 rocketmq/client/src/main/java/org/apache/rocketmq/client/consumer/DefaultMQPushConsumer.java
consumeMessageBatchMaxSize 就像注释表述的一样,批量消费的大小,也就是说当MQ消息从Broker拉取之后每次派发给我们每个消费类的大小,也许看到下图大家更容易理解些。
看到这里可能大家已经知道了consumeMessageBatchMaxSize 和我们消费类相关参数的对应关系,然后我们再继续看看consumeMessageBatchMaxSize 在Rocketmq 源码里具体的使用地方
代码地址: org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService ,具体代码接入如下:
当从broker拉取的msgs的大小超过consumeMessageBatchMaxSize 的大小时,将会对消息进行拆分,然后提交到线程池进行处理,从这里我们也不难看到这个参数的意义,值越小越能更大化的利用多线程去执行。
该参数默认值是1: 最大值是1024,这个具体设置多少会比较合适?这个还需要根据自己的业务来定,假如我们每个消息的处理耗时很长,那么这个参数就应该设置的偏小一点,不要让单个消息的消费慢影响同一批中的其他消息。
- pullBatchSize: 回头我们再看看pullBatchSize 这个参数,这个参数代表每批次从broker拉取消息的最大个数,默认值是32. 代码如下: