RocketMq(七)消息堆积处理方式

一、产生原因:

消息堆积顾名思义就是消息队列中堆积了大量未被处理的消息,主要发生在高并发的场景下,生产者发送消息的速率远大于消费者组消息的速度。产生的原因有:

(1)新上线的消费者的消费逻辑存在Bug,导致消息不能被正常消费。某些消息消费失败,或者消费超时,从而导致消息被大量堆积。

(2)消费者实例宕机或者由于网络的原因不能连上Broker集群。消费者实例可能是单节点或者机房网络不好的情况。

(3)生产者短时间内大量发送消息到Broker端,消费者的消费能力不足。消费者消费消息是一些比较耗时的操作。这导致消费者的消费速率远低于生产者发送速率。

二、解决方法:

1、集群部署:消费者实例采用多实例,异地多活的方式,确保极端的情况下都能有消费者能够正常消费消息。

2、提高消费者的消费速率:

(1)同一个消费者组下增加消费者实例:比如Topic中有8个队列,那么可以将消费者数量最多增加到8个(多了则是空闲的)。在RocketMQ中某个topic下的某个队列只能被同一消费者组中的某个消费者消费如果消费者数量少于Queue的数量,那么有可能会出现消费不均的情况。

(2)提高单个消费者的消费并行线程:RocketMQ 支持批量消费消息,可以通过修改DefaultMQPushConsumer 消费者类的consumeThreadMin(最少消费线程数),以及consumeThreadMax(最大消费线程数)来提高单个消费者的消费能力。

(3)批量消费消息:某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量。建议使用5.x SDK的SimpleConsumer,每次接口调用设置批次大小,一次性拉取消费多条消息。

你可能感兴趣的:(springBoot+消息队列,rocketmq)