关于RocketMq消息积压问题排查

1、最近生产的mq出现了一个问题:我的消费者是集群(就是双节点),现在消息积压到1亿多条,如下图所示
在这里插入图片描述
其中有两个问题:问题1,就是为什么我的消息积压这么多?问题2:我的消费者是集群,为什么只有一台消息在消费

2、接着开始排查问题,结果发现在消费端的逻辑代码里面有异常,因为我们在mq里面配置了消息重试机制,及重试机制的间隔时间,所以消息一直卡在那。但是问题来了,我们对异常代码进行捕获,在catch里面也有对mq进行返回,如下图所示

    @Override
    public OrderAction consume(final Message message, final ConsumeOrderContext context) {
   

        log.info("MQ消息消费者监听消息内容:{}", message);

        MqMessageRecordMo mqMessageRecordMo = new MqMessageRecordMo();
        try {
   
            String body = new String(message.getBody());
            String tag = message.getTag();
            mqMessageRecordMo.setMsgId(message.getMsgID());
            mqMessageRecordMo.setOrderTopic(message.getTopic
### 解决 RocketMQ 消息堆积问题 #### 方法一:增加消费者数量 当消息生产速度超过消费能力时,可以考虑增加消费者的实例数目来提高处理效率。更多的消费者能够并行地拉取消息并执行业务逻辑,从而缓解消息积压的情况[^1]。 #### 方法二:优化线程配置 通过对现有线程模型进行细致分析,调整不合理之处可显著改善性能表现。例如适当增大Pull线程池大小以及Broker端处理请求的工作线程数等参数设置,有助于加快消息传递速率,减轻堆积现象[^4]。 #### 方法三:启用批量发送模式 对于支持批量化操作的应用场景而言,在Producer端开启此特性可以让每次网络传输携带更多条目,进而降低单位时间内所需完成I/O次数,间接提升了系统的吞吐量水平,减少了未被及时读取的消息累积可能性。 #### 方法四:合理规划Topic分区策略 根据实际需求分配足够的Partition给各个主题,并确保各Consumer Group内的成员均匀分布于不同节点之上参与订阅活动。这样不仅有利于负载均衡,而且能有效防止某些热点数据引发局部阻塞而导致全局延迟加剧的问题发生[^2]。 #### 方法五:监控与预警机制建设 建立完善的运行状态监测体系,实时掌握集群健康状况及各项指标变化趋势;一旦检测到异常波动即刻触发告警通知相关人员介入排查原因采取措施加以应对,防患于未然,避免潜在风险扩大化形成大规模堵塞局面[^3]。 ```python from rocketmq.client import PushConsumer, MessageListenerConcurrently def consume_msg(msgs): # 处理接收到的消息列表 for msg in msgs: print(f"Received message: {msg.body.decode('utf-8')}") consumer = PushConsumer("example_group") consumer.set_name_server_address("localhost:9876") consumer.subscribe("TestTopic", "*") consumer.register_message_listener(MessageListenerConcurrently(consume_msg)) consumer.start() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值