消息积压该怎么处理

1. 出现原因

系统的某个部分出现了性能问题,来不及处理上游发送的消息,才会导致消息积压

2. 优化性能避免消息积压

消息队列的性能优化,更关注,在消息的收发两端,我们的业务代码怎么和消息队列配合,达到一个最佳的性能。

2.1 发送端性能优化

代码发送消息的性能上不去,你需要优先检查一下,是不是发消息之前的业务逻辑好事太久导致的
只需要注意设置合适的并发和批量大小,就可以达到很好的发送性能

2.2 消费端性能优化

设计系统的时候,一定要保证消费端的消费性能要高于生产端的发送性能,这样的系统才能健康的持续运行

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

3. 消息积压该如何处理

积压原因多种多样,最粗力度的原因,有两种:要么是发送快乐,要么是消费变慢了。

a.如果是单位时间发送的消息增多,短时间内不太可能优化消费端的代码提升消费性能,唯一的方法是通过扩容消费端的实例数提升总体的消费能力。
b.如果消费变慢了,检查是否消费线程是不是触发了死多或者卡在等待某些资源上。

4. 问题

消费端是否可以通过批量消费的方式来提升消费性能?

消费端进行批量操作,感觉和上面的先将消息放在内存队列中,然后在并发消费消息,如果机器宕机,这些批量消息都会丢失,如果在数据库层面,批量操作在大事务,会导致锁的竞争,并且也会导致主备的不一致。如果是一些不重要的消息如对日志进行备份,就可以使用批量操作之类的提高消费性能,因为一些日志消息丢失也是可以接受的。