rabbitmq-优化prefetch count参数提升性能

怎么调整broker来达到不增加集群或者修改业务代码的方式来提高系统的速度?

prefetch count参数有什么用?

This is done by setting a “prefetch count” value using the basic.qos method. The value defines the max number of unacknowledged deliveries that are permitted on a channel.Once the number reaches the configured count, RabbitMQ will stop delivering more messages on the channel unless at least one of the outstanding ones is acknowledged. (A value of 0 is treated as infinite, allowing any number of unacknowledged messages.)

看下官网的介绍:这个值用来定义channel上的最大的unack的消息数量。一旦数量达到配置的值,mq将停止传递更多的消息,直到至少一个消息被ack掉。rabbitmq提供了了global参数,true表示设置在channel上,false表示设置在每个consumer上(这也是实现和协议不同的地方)。

另外由于传递消息和手动确认消息是完全异步的过程,因此当你修改prefetch的值时,可能channel已经存在的消息数量已经超过该值。即使在手动模式下,qos的配置也并不会影响pull api

消费者确认模式、prefetch和吞吐量

确认模式和qos的prefetch的值对消费者的吞吐量有着重要的影响。通常来说,提升prefetch可以有效改善消息投递到消费者的速率。自动ack模式可以达到最佳的投递效率。但是,在这两种情况下,已投递但未处理的消息数量也会增加,从而导致消费者使用的内存增加。

应该谨慎的使用自动确认模式或者具有无限制预取的手动确认模式。消费者获取大量消息而没有及时确认会导致消费者内存消耗的增长。找到合适的预取值需要不断的实验并且因为工作负载而异,100~300范围内的值,通常提供最佳吞吐量,并且不会使消费者有太大风险。但较高的预取值仍然会碰上收益递减定律。

rabbitmq官方提供了一些实验数据

image-20220530122338894

可以看到达到30之后,网络带宽的限制将会成为主要矛盾,再提高该值没有更大的好处了。此外控制台上显示的消费者利用率是一个很好的判断消费者效率的指标。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值