首页 > 其他分享 >怎么处理消息积压问题?

怎么处理消息积压问题?

时间:2023-03-11 09:02:32浏览次数:33  
标签:积压 处理 性能 系统 发送 队列 消息

消息积压是我们在使用消息队列时经常遇到的问题,它的直接原因是系统中某个部分出现了性能问题,没有来得及处理上游发送的消息。

优化性能避免消息积压

当我们引入消息系统后,站在消息系统的角度,整个系统可以分为三部分:1. 消息生产者,2. 消息队列,3. 消息消费者。

我们在谈论优化性能避免积压消息时,重点会放在消息生产者和消息消费者这两部分。对于绝大多数使用消息队列的业务来说,消息队列本身的处理能力要远大于业务系统的处理能力。

消息生产者性能优化

如果我们的代码发送消息的性能有问题,我们可以检查一下是不是发消息之前的业务逻辑耗时太多了。

我们可以通过调整发送消息的批量大小,或者增加并发,来解决消息生产者面临的问题,至于应该选择批量发送还是增加并发,主要取决于发送端程序的业务性质。

  • 线上运行的微服务,主要接收RPC请求处理在线业务,它对请求响应时延比较敏感,适合并发的方式来提升性能。
  • 离线分析系统,不关心时延,更注重整个系统的吞吐量,这种情况适用于批量方式来提升性能。

消息消费者性能优化

我们要保证消费端的性能要好于生产端的发送性能,这样的系统才能健康的持续运行。

消费端除了优化消费业务之外,也可以通过水平扩容,增加消费端的并发数来提升性能,需要注意的是,在扩容消费者的实例数量的同时,必须同步扩容主题中的分区(队列)数量,确保Consumer的数量和分区的数量是尽量相等的。

如果Consumer的实例数量超过分区数量,这样的扩容是完全没有效果的,因为同一个分区(队列)同时只能有一个Consumer去处理消息。

怎么处理积压消息?

导致消息队列突然增加积压的原因有两种:要么消息发送变快了,要么消息消费变慢了。

大部分消息队列都内置了监控的功能,只要通过监控数据,很容易确定是哪种原因。

如果短时间内没有足够的服务器资源区进行扩容,那么可以考虑对服务进行系统降级,通过关闭一些不重要的业务,减少发送方发送的数据,最低限度让系统保持正常运转,服务一些重要业务。

如果我们发现无论是发送消息的速度还是消费消息的速度和原来相比没有什么变化,可以去检查一下消费端,看看是不是因为消费失败导致了一条消息被反复消费,这样也会拖慢这个系统去消费消息的速度。

标签:积压,处理,性能,系统,发送,队列,消息
From: https://www.cnblogs.com/wing011203/p/17205187.html

相关文章

  • Selenium自动化等待处理代码参考
    Selenium自动化等待隐式等待python版本self.drvier.implicitly_wait(30)java版本//隐式等待调用方式,设置等待时间为30秒driver.manage().timeouts().implicitlyWait(30,Tim......
  • .net OpenQASelenium 等待常见的处理方式
    .netSelenium等待常见的处理方式显示等待1使用Until和匿名函数的方法varwait=newWebDriverWait(driver,newTimeSpan(0,0,30));wait.IgnoreExceptionTypes(typeof......
  • 当SQLCA全局对象不使用时如何妥善处理避免误引用
    当我们有多个连接到数据库时,可能默认的链接不用sqlca。默认它还是存在,而且当我们写内嵌sql时,不用usingxxx时。会默认使用到sqlca造成难于测试的错误。(sqlca没有赋值但是被......
  • 基于肤色模型和形态学处理的人脸检测算法matlab仿真
    1.算法描述        在过去的几年里,人脸识别受到了广泛的关注,被认为是图像分析领域最有前途的应用之一。人脸检测可以考虑人脸识别操作的很大一部分。根据其强度将......
  • ANSI转UTF-8编码的bat批处理脚本
    替换掉bat脚本里的a.txt即可ANSI转UTF.bat脚本内容:::注释::code1=ANSI(GB2312)::code2=Big5::code3=Shift_JIS::code4=EUC-KR::code5=UTF-8::code6=Unicode@echo......
  • 指标数据的规范化处理
    在_多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中......
  • 8086 微处理器
    《Intel8086CPU的内部结构》  通用寄存器AX,BX,CX,DXAX:累加器BX:基址寄存器CX:计数寄存器DX:数据寄存器具体师大书P12......
  • opencv图像处理基础之膨胀和腐蚀
    膨胀和腐蚀是图像处理中最常用也是最基础的形态学操作。它可以改变图像的一些属性。其中比较常见的应用场景有:1、边缘检测:膨胀和腐蚀可以提取二值图像中的边缘信息。通过先......
  • JAVA多线程处理大量数据(二)--推荐
    背景说明:要对服务器上一个目录进行全量文件读取1、多线程执行类--FileThreadUtils.javaimportcn.hutool.core.collection.CollUtil;importcn.hutool.core.io.FileUti......
  • rabbitmq五种消息模型
    首先什么是MQMQ全称是MessageQueue,即消息对列!消息队列是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产......