阿里二面:RocketMQ 消息积压了,增 加消费者有用吗?

本文讨论了在RocketMQ消息积压情况下,增加消费者是否有助于提高消息消费速度。当消费者的数量小于MessageQueue数量时,增加消费者可以加快消息消费;反之,若消费者数量已大于等于MessageQueue数量,则无效。文章还提到了消费者拉取消息的条件,如ProcessQueue的消息数量和大小限制,以及在顺序消费场景下的延迟拉取。此外,还分析了消费者延迟拉取的原因,如业务逻辑复杂、数据库或外部服务响应慢等,并给出了相应对策。
摘要由CSDN通过智能技术生成

面试官:RocketMQ 消息积压了,增 加消费者有用吗?

我:这个要看具体的场景,不同的场景下情况是不一样的。

面试官:可以详细说一下吗?

我:如果消费者的数量小于 MessageQueue 的数量,增加消费者可以加快消 息消费速度,减少消 息积压。比如一个 Topic 有 4 个 MessageQueue,2 个消费者进行消费,如果增加一个消费者,明细可以加快拉取消息的频率。如下图:

如果消费者的数量大于等于 MessageQueue 的数量,增加消费者是没有用的。比如一个 Topic 有 4 个 MessageQueue,并且有 4 个消费者进行消费。如下图

​面试官:你说的第一种情况,增加消费者一定能加快消 息 消 费的速度吗?

我:这...,一般情况下是可以的。

面试官:有特殊的情况吗?

我:当然有。消费者消息拉取的速度也取决于本地消息的消费速度,如果本地消息消费的慢,就会延迟一段时间后再去拉取。

面试官:在什么情况下消费者会延迟一段时间后再去拉取呢?

我:消费者拉取的消息存在 ProcessQueue,消费者是有流量控制的,如果出现下面三种情况,就不会主动去拉取:

  • ProcessQueue 保存的消息数量超过阈值(默认 1000,可以配置);

  • ProcessQueue 保存的消息大小超过阈值(默认 100M,可以配置);

  • 对于非顺序消费的场景,ProcessQueue 中保存的最后一条和第一条消息偏移量之差超过阈值(默认 2000,可以配置)。

这部分源码请参考类:org.apache.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl。

面试官:还有其他情况吗?

我:对于顺序消费的场景,ProcessQueue 加锁失败,也会延迟拉取,这个延迟时间是 3s。

面试官:消费者延迟拉取消息,一般可能是什么原因导致的呢?<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值