消息队列消息持续积压 与 消息队列满解决方法 女爷i 2022-12-15 15:26 429阅读 0赞 ## 1. 消息队列消息持续积压 与消息队列满出现原因 ## MQ消息持续积压 与消息队列满出现原因 可以从生产者端与消费者端两个方面去思考,要么是发送端变快,要么是消费端变慢造成: 1. Producer 端单位时间发送的消息增多,Consumer 端短时间内来不及消费; 2. Producer 端单位时间发送的消息正常,Consumer 端因消费线程低效不能及时消费 ## 2. 如何优化MQ性能避免消息积压 ## 设计MQ系统的时候,**一定要保证Consumer端的消费性能要高于**Producer**端的发送性能,这样的系统才能健康的持续运行。** ### 2.1 发送端性能优化 ### Producer 端发送消息的性能低,需要检查Producer 端发消息之前,是否因业务逻辑耗时太久导致;只需要注意设置合适的并发和批量大小,就可以达到很好的发送性能。 ### 2.2 消费端性能优化 ### 1. 优化消费端的**消费业务逻辑**性能; 2. 水平扩容,通过**扩容Consumer端的实例数**来提升总体的消费性能 1)先修复consumer的问题,确保其恢复原有的消费速度; 2)将现有consumer都停掉,新建一个Topic,**Partition可以是原来的10倍**,临时建立好原先10倍或者20倍的queue数量; 3)然后写一个临时的分发数据的consumer程序,这个程序部署上去消费积压的数据,消费之后不做耗时的处理,直接均匀轮 询写入临时建立好的10倍数量的queue; 4)接着**临时征用10倍的机器来部署consumer**,每一批consumer消费一个临时queue的数据,这种做法相当于是临时将queue资源和consumer资源扩大10倍,以原来的10倍速度来消费数据; 5)等快速消费完积压数据之后,得恢复原先部署架构,重新启用原先的consumer机器来消费消息 3. 扩容Consumer的实例数量的同时,必须同步扩容Topic中的Partition数量,**确保Consumer的实例数和Partition数量相等**,以最大化消费线程并发的利用率。 ### **3.** 消费端是否可以通过批量消费的方式来提升消费性能? ### 消费端进行批量操作,感觉和上面的先将消息放在内存队列中,然后在并发消费消息,**如果机器宕机,这些批量消息都会丢失**,如果在数据库层面,批量操作在大事务,会导致锁的竞争,并且也会导致**主备的不一致**。如果是一些不重要的消息如对日志进行备份,就可以使用批量操作之类的提高消费性能,因为一些日志消息丢失也是可以接受的。 参考: 1. [ RabbitMQ使用不当导致的队列堵塞问题及解决办法][RabbitMQ] [RabbitMQ]: https://blog.csdn.net/runyon1982/article/details/49130997?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
相关 消息队列 :场景 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0... 蔚落/ 2024年04月18日 23:53/ 0 赞/ 64 阅读
相关 春招面试复习:消息队列(五)- 消息积压解决方案 1 消息积压问题追溯 系统某部分出现性能问题,来不及处理上游发的消息,导致消息积压。 消息积压是正常现象,积压越来越多就需要处理了。 就像一个水库,日常蓄水是正常 港控/mmm°/ 2023年01月06日 11:35/ 0 赞/ 124 阅读
相关 消息队列消息持续积压 与 消息队列满解决方法 1. 消息队列消息持续积压 与消息队列满出现原因 MQ消息持续积压 与消息队列满出现原因 可以从生产者端与消费者端两个方面去思考,要么是发送端变快,要么是消费端变慢 女爷i/ 2022年12月15日 15:26/ 0 赞/ 430 阅读
相关 消息队列 1. 消息队列在项目中的使用 背景:在分布式系统中是如何处理高并发的。 由于在高并发的环境下,来不及同步处理用户发送的请求,则会导致请求发生阻塞。比如说,大量的ins ﹏ヽ暗。殇╰゛Y/ 2022年12月15日 03:23/ 0 赞/ 251 阅读
相关 消息队列 https://www.cnblogs.com/457248499-qq-com/p/7392678.html 来源 消息队列:在消息的传输过程中保存消息的容器。 迈不过友情╰/ 2022年05月30日 07:42/ 0 赞/ 269 阅读
相关 消息队列 消息队列是啥?我觉得大家都心知肚明,已经众所周知到不用解释的程度。不过,但凡学习、解释一样东西,都应该遵循 “它是什么?”、 “做什么用?”、 “为啥要用它” ╰半橙微兮°/ 2022年04月23日 08:42/ 0 赞/ 342 阅读
相关 消息和消息队列 每个事件的操作系统被打包成一个称为消息结构MSG要传递给应用 typedef struct tagMSG { HWND hwnd; 超、凢脫俗/ 2022年03月28日 08:42/ 0 赞/ 333 阅读
相关 消息队列 消息队列介绍 维基百科上的描述:在计算机科学中,消息队列(Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通 红太狼/ 2022年01月26日 10:51/ 0 赞/ 326 阅读
相关 消息队列 为什么写这篇文章? 博主有两位朋友分别是小A和小B: 1. 小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑。再不然就 小咪咪/ 2021年12月20日 06:51/ 0 赞/ 420 阅读
还没有评论,来说两句吧...