消息队列出现消息积压应该如何处理

当消费者出现异常,很容易引起队列积压,如果一秒钟1000个消息,那么一个小时就是几千万的消息积压,是非常可怕的事情,但是生产线上又有可能会出现;

当消息积压来不及处理,rabbitMQ如果设置了消息过期时间,那么就有可能由于积压无法及时处理而过期,这消息就被丢失了;

解决方法如下:

  • 不建议在生产环境使用数据过期策略,一是数据是否丢失无法控制,二是一旦积压就很有可能丢失;建议数据的处理都有代码来控制;

  • 当出现消息积压时,做法就是临时扩大consumer个数,让消息快速消费,一般都是通过业务逻辑的手段来完成。

rabbitmq解决积压范例

1.修复consumer代码故障,确保consumer逻辑正确可以消费;

2.停止consumer,开启10倍20倍的queue个数;

  • 创建一个临时的consumer程序,消费积压的queue,并把消息写入到扩建的10倍queue中;
  • 再开启10倍20倍的consumer对新的扩充后队列进行消费;
  • 这种做法相当于通过物理资源扩充了10倍来快速消费;

3.当消费完成后,需要恢复原有架构,开启原来的consumer进行正常消费;

kafka解决范例

1.修复consumer代码故障,确保consumer逻辑正确可以消费;

2.停止consumer,新建topic,新建10倍20倍的partition个数;

  • 创建对应原topic的partition个数的临时的consumer程序,消费原来的topic,并把消息写入到扩建的新topic中;

  • 再开启对应新partition个数的consumer对新的topic进行消费;

  • 这种做法相当于通过物理资源扩充了10倍来快速消费;

3.当消费完成后,需要恢复原有架构,开启原来的consumer进行正常消费;

相关推荐
林三的日常2 分钟前
SpringBoot + Druid SQL Parser 解析表名、字段名(纯Java,最佳方案)
java·spring boot·sql
deviant-ART7 分钟前
java stream 的 findFirst 和 findAny 踩坑点
java·开发语言·后端
青衫码上行14 分钟前
【从零开始学习JVM】字符串常量池
java·jvm·学习·面试·string
历程里程碑21 分钟前
55 Linux epoll高效IO实战指南
java·linux·服务器·开发语言·前端·javascript·c++
何包蛋H22 分钟前
Java并发编程核心:JUC、AQS、CAS 完全指南
java·开发语言
鱼鳞_24 分钟前
Java学习笔记_Day35(多线程)
java·笔记·学习
木易 士心27 分钟前
MyBatis Plus 核心功能与用法
java·后端·mybatis
下次再写32 分钟前
互联网大厂Java面试三轮技术问答及详解——涵盖Spring Boot与微服务
java·springboot·microservices·interview
林深时见鹿v35 分钟前
《后端开发全栈工具安装踩坑指南 & 经验沉淀手册》
java·人工智能·python·oracle
Xiu Yan40 分钟前
Java 转 C++ 系列:STL容器之list
java·开发语言·数据结构·c++·stl·list·visual studio