消息积压&消息丢失解决方案

简介: 消息积压&消息丢失解决方案

问题本质都在于你的消费端可能出了问题,不消费或消费的太慢!更可怕的是由于积压时间太长,导致如果起初还设置了TTL后失效了怎么办?

消息积压

其实数据积压的问题是架构设计不合理。

丢失的数据是通过日志找回来,如果日志也找不到了 那就没招了


一般这时,只能操作临时紧急扩容了,具体操作步骤和思路如下:


先修复consumer,确保恢复消费速度,然后将现有cnosumer都停掉

新建一个topic,partition是原来10倍,临时建立好原先10倍或者20倍的queue

然后写一个临时的分发数据的consumer程序,这个程序部署上去消费积压的数据,消费之后不做耗时的处理,直接均匀轮询写入临时建立好的10倍数量的queue

接着临时征用10倍的机器来部署consumer,每一批consumer消费一个临时queue的数据

这种做法相当于是临时将queue资源和consumer资源扩大10倍,以正常的10倍速度来消费数据

等快速消费完积压数据之后,得恢复原先部署架构,重新用原先的consumer机器来消费消息


消息丢失

假设用rabbitmq,可设置TTL,积压超时后消息就没了,数据也就丢了。注意此时,并非数据大量积压在MQ,而是大量数据直接搞丢了。


可以采取批量重导,就是大量积压时,就直接丢弃数据,然后等高峰期后,比如半夜,将丢失的那批数据,写个程序查出来,然后重新灌入MQ,把白天丢的数据补回来。



目录
相关文章
|
1月前
|
消息中间件 存储 运维
|
3月前
|
消息中间件
【面试问题】如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?
【1月更文挑战第27天】【面试问题】如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?
|
3月前
|
消息中间件 存储 Java
MQ怎么确保消息不丢失
MQ怎么确保消息不丢失
|
9月前
|
消息中间件
如何保证消息的可靠性,避免消息丢失
如何保证消息的可靠性,避免消息丢失
53 0
|
4月前
|
消息中间件 存储 程序员
RabbitMQ消息丢失的场景,如何保证消息不丢失?(详细讲解,一文看懂)
RabbitMQ消息丢失的场景,如何保证消息不丢失?(详细讲解,一文看懂)
151 0
RabbitMQ消息丢失的场景,如何保证消息不丢失?(详细讲解,一文看懂)
|
4月前
|
消息中间件 存储 安全
mq 消费者监听经常断会出现丢消息的问题吗
在消息队列(MQ)系统中,消费者监听经常断开可能会导致消息丢失的问题,具体取决于消息队列系统的设计和配置,以及你的应用程序的处理方式。以下是一些可能导致消息丢失问题的情况: 1. **消费者断开连接:** 如果消费者监听过程中发生意外断开,例如网络故障、消费者应用程序崩溃等,那么在断开连接的瞬间,可能存在未被消费的消息。 2. **消息确认机制:** 消息队列通常提供消息确认机制,确保消息在被成功处理后才被从队列中移除。如果你的消费者应用程序在处理消息时没有发送确认,或者确认机制配置不正确,可能导致消息在被处理前被从队列中移除,从而丢失。 3. **持久化设置:** 消息队列通常提供持久
|
8月前
|
消息中间件 NoSQL Kafka
如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?
为了提高应用程序的性能和可扩展性,很多应用程序开始采用消息队列(MQ)来处理消息。 MQ 可以将消息异步地发送到目的地,从而实现解耦、异步处理和流量控制等功能。 但是,MQ 也带来了一些问题,如消息重复消费和消息消费的幂等性问题。 本文将介绍 MQ 如何保证消息不被重复消费,并讨论如何保证消息消费的幂等性。
|
9月前
|
消息中间件 Kafka 测试技术
MQ 学习日志(七) 保证消息消费的顺序性
保证消息消费的顺序性
128 0
|
9月前
|
消息中间件 存储 NoSQL
EMQ如何保证消息不丢失?
EMQ 通过以下方式来保证消息不丢失
395 0
|
10月前
|
消息中间件 存储 NoSQL
该如何保证消息不被重复消费
该如何保证消息不被重复消费
115 0