首页 > 其他分享 >RocketMQ多个消费组消费同一个topic,其中有一个组正常消费,其余均异常堆积

RocketMQ多个消费组消费同一个topic,其中有一个组正常消费,其余均异常堆积

时间:2024-11-20 23:07:21浏览次数:1  
标签:消费 消费者 topic Tag 消息 msg consumer RocketMQ

@Service
@RocketMQMessageListener(consumerGroup = "${rocketmq.consumer.group}", topic = "${rocketmq.consumer.topic}")
public class MsgListener implements RocketMQListener<MessageExt>, RocketMQPushConsumerLifecycleListener {

private org.slf4j.Logger logger = LoggerFactory.getLogger(getClass());

@Override
public void onMessage(MessageExt msg) {
logger.debug("RECEIVE_MSG_BEGIN: " + msg.toString());
logger.debug(String.format("消费消息,消息ID:%s,消息KEY:%s,消息体:%s ", msg.getMsgId(), msg.getKeys(), new String(msg.getBody())));
}

    @Override
    public void prepareStart(DefaultMQPushConsumer consumer) {
        consumer.setInstanceName("testTopic-tag1");
    }
}

原因

多消费组实例的场景下,只配置了一个通用的name server配置,导致有些消费组
consumer.setInstanceName("testTopic-tag1");正常连接到b-name server,但是使用默认配置连到了a-name server上面,导致关系错乱,无法正常消费消息
consumer.setInstanceName("testTopic-tag2");也是被错误的连接到了a-name server
在初始化的时候

问题排查思路

RocketMQ中,如果不同消费组消费同一个Topic,理论上每个消费组应该只消费该Topic的消息一次。然而,确实有可能出现某个消费组偶尔消费不到消息的情况,这可能是由以下原因导致的:

  1. 消费分组不正确:
    确保你在创建消费者时指定了正确的消费组名称,并且这个消费组已经订阅了要消费的Topic。

  2. 消息过滤或Tag匹配问题:
    如果消费者使用了消息过滤或者Tag匹配,那么只有满足过滤条件或者Tag匹配的消息才会被消费。检查你的消费代码,确保过滤条件和Tag匹配设置正确。

  3. 消费线程数不足或阻塞:
    如果消费者的消费线程数不足或者消费过程中出现了阻塞,可能会导致部分消息未能及时消费。检查消费者的配置和日志,确保消费线程数足够并且没有异常情况。

  4. 消息堆积:
    如果Broker中的消息积压严重,新产生的消息可能会被延迟投递,从而导致某个消费组暂时消费不到消息。

  5. 网络问题或 Broker 故障:
    网络波动、Broker重启或者其他故障可能会影响消息的正常投递和消费。

  6. 消费位点问题:
    消费者的消费位点(即消费进度)可能存在异常,导致某些消息未被正确消费。检查消费者的消费位点信息,确保其与实际消费进度一致。

  7. 系统负载过高:
    如果系统负载过高,包括CPU、内存或者磁盘I/O等资源紧张,可能会影响RocketMQ的正常运行和消息投递。

为了解决这个问题,你可以按照以下步骤进行排查和处理:

    • 确认消费组的配置和订阅关系是否正确。
    • 检查消费者的消费代码,特别是消息过滤和Tag匹配的部分。
    • 调整消费者的消费线程数和消费参数,以适应实际的负载和性能需求。
    • 监控Broker的状态和网络连接,确保其正常运行。

 

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

首发链接:https://www.cnblogs.com/lingyejun/p/18559591

标签:消费,消费者,topic,Tag,消息,msg,consumer,RocketMQ
From: https://www.cnblogs.com/lingyejun/p/18559591

相关文章

  • 33. 生产者消费者模型
    一、生产者消费者模型  假如有两个进程A和B,它们共享一个固定大小的缓冲区,A进程产生数据放入缓冲区,B进程从缓冲区中取出数据进行计算,那么这里其实就是一个生产者和消费者的模式,A相当于生产者,B相当于消费者。  在多线程开发中,如果生产者生产数据的速度很快,而消费者消......
  • 《陶瓷砖》行业标准及相关质量检验规范详细规定了陶瓷砖的各项技术要求、性能测试方法
    《陶瓷砖》行业标准和相关质量检验规范主要涉及陶瓷砖的生产工艺、物理性能、外观质量、检测方法等各个方面。这些标准和规范确保了陶瓷砖产品的质量,满足不同市场需求。中国的陶瓷砖行业标准一般由国家质量监督检验检疫总局及中国国家标准化管理委员会发布。主要行业标准及质量检......
  • 关于RabbitMQ的几种消费模式的概念
    简单模式【SimpleQueue】订阅者发布消息到队列,消息只能被一个消费者拿走,拿走了队列中就没消息了工作队列模式【WorkQueues】允许多个消费者从同一个队列中获取消息。通常用于分布式的工作处理系统,其中每个任务被分配给空闲的工作者(消费者)。发布订阅模式【Publish/Subs......
  • RocketMQ负载均衡-消费者的负载均衡-统一哈希算法
    RocketMQ消费者的负载均衡-一致性哈希算法简介在分布式系统中,负载均衡是确保系统高效、可靠运行的关键。RocketMQ作为一款高性能的分布式消息中间件,通过多种负载均衡策略,实现消息队列在多个消费者之间的合理分配。其中,一致性哈希算法(ConsistentHashing)是一种先进的负......
  • 【JavaEE初阶 — 多线程】生产消费模型 & 阻塞队列
         1.阻塞队列     (1)阻塞队列   1.概念   阻塞队列是一种特殊的队列,也遵守"先进先出"的原则;阻塞队列能是一种线程安全的数据结构,主要用来阻塞队列的插入和获取操作:当队列满了的时候,插入操作会被阻塞,直到队列有空位。当队列为空的时......
  • 「人眼视觉不再是视频消费的唯一形式」丨智能编解码和 AI 视频生成专场回顾@RTE2024
       你是否想过,未来你看到的电影预告片、广告,甚至新闻报道,都可能完全由AI生成? 在人工智能迅猛发展的今天,视频技术正经历着一场前所未有的变革。从智能编解码到虚拟数字人,再到AI驱动的视频生成,这一领域的创新正以惊人的速度推进。这些进步不仅提升了技术指标,更为实时......
  • 语音 AI 革命:未来,消费者更可能倾向于与 AI 沟通,而非人工客服
    「未来,消费者更可能倾向于与AI沟通,而非人工客服,因为这将成为解决问题的最高效途径。」 这篇来自BessemerVenturePartners的报告,是目前为止对语音AI在企业应用上最完整清晰的一次梳理。 核心要点: 尽管市场规模超过50亿美元,传统的电话客服系统却备受企业和消费......
  • 实木家具鉴定标准表格;消费者在购买实木家具时,应提高警惕,注意识别是否存在“贴皮”或“
    实木家具鉴定标准表格项目具体内容鉴定标准注意事项1.木材种类检查家具所用木材的种类,是否符合实木家具要求。1.应为天然实木,不含人工合成材料。1.可通过木材切面、颜色、纹理等特点辨识木材种类。2.木材厚度与结构检查木材厚度是否符合设计要求,结构是否稳......
  • SpringCloud篇(服务提供者/消费者)(持续更新迭代)
    在服务调用关系中,会有两个不同的角色:服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)但是,服务提供者与服务消费者的角色并不是绝对的,而是相对于业务而言如果服务A调用了服务B,而......
  • kafka消费者的消费分区策略有哪些,默认是哪个?
    Kafka消费者的分区分配策略主要有以下几种,分别决定了如何将多个分区分配给消费者:1.Range(范围分配)描述:将分区连续地分配给消费者。每个消费者负责一段连续的分区。如果有多个消费者,那么消费者会按照顺序被分配一段连续的分区。适用场景:适用于消费者之间的数据量差异较小,且需......