有一个Apache RocketMQ问题我没想明白. mq不是用来消峰的么?为什么积压个几百万消息

有一个Apache RocketMQ问题我没想明白. mq不是用来消峰的么?为什么积压个几百万消息就没法写入到broker了(broker busy)

展开
收起
真的很搞笑 2023-06-28 17:10:20 78 分享 版权
2 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    Apache RocketMQ 的确是用来处理消息流量的,包括消峰和异步处理。它通过将消息存储在 Broker 中,并使用高效的消息传递机制进行分发和处理。

    关于您提到的问题,如果积压了几百万条消息无法写入到 Broker 并出现 "broker busy" 的错误提示,可能是由以下原因导致的:

    1. Broker 资源限制: 当消息持续涌入并积压时,Broker 可能会面临处理能力不足的情况。这可能是由于 Broker 所在的机器资源(如 CPU、内存、磁盘)有限或配置不合理,导致无法及时处理并写入大量消息。您可以检查 Broker 所在机器的资源使用情况,包括 CPU、内存以及与磁盘相关的指标(I/O、磁盘空间等),并根据需要做出相应的优化。

    2. 写入速率超过 Broker 的处理能力: 如果发送消息的速率超过了 Broker 处理消息的能力,就会导致消息积压。RocketMQ 默认会对消息进行持久化,需要将消息写入磁盘,这一过程可能会受到磁盘 I/O 的限制。您可以尝试降低发送消息的速率,或者调整 Broker 的配置,增加其处理能力。

    3. 网络问题或故障: 如果 Broker 与生产者/消费者之间的网络连接存在问题,例如网络延迟过高或网络故障,就可能导致消息无法及时写入到 Broker。您可以检查网络连接的稳定性,并确保网络环境良好。

    为了解决这个问题,您可以采取以下措施:

    1. 检查 Broker 的资源和配置情况,确保其能够处理当前的消息负载。根据需要增加机器的 CPU、内存和磁盘等资源,或者调整 Broker 的配置参数。

    2. 合理控制消息发送的速率,避免消息的涌入超过 Broker 的处理能力。可以通过限制发送方的消息发送频率,或者使用流量控制机制来平滑消息的流量。

    3. 监控和优化网络连接,确保 Broker 与生产者/消费者之间的网络连接稳定,并尽可能减少网络延迟。

    2023-06-29 08:12:11
    赞同 展开评论
  • 我之前也遇到这个问题,后来对比测试才恍然大悟,硬盘速度不够。 压力测试,机械盘 很容易(broker busy)。赶紧升到固态硬盘。,此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”

    2023-06-28 17:17:05
    赞同 展开评论

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系列产品 Serverless 化。RocketMQ 中文社区:https://rocketmq-learning.com/

收录在圈子:
+ 订阅
阿里云 云原生应用平台 肩负阿里巴巴集团基础设施云化以及核心技术互联网化的重要职责,致力于打造稳定、标准、先进的云原生产品,成为云原生时代的引领者,推动行业全面想云原生的技术升级,成为阿里云新增长引擎。商业化产品包括容器、云原生中间件、函数计算等。
还有其他疑问?
咨询AI助理