栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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官方提供了一些实验数据

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/936863.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号