rocketMq的消息堆积

简介: 概述    这篇文章的目的主要是为了讲清楚rocketMq消息堆积的概念,我印象中的rocketMq的消息堆积应该分为两层,一层是broker中实际写入消息量和consumeQueue已经消费位移的偏差,另外一层consumer端本身已经拉取消息的堆积,而今天要讲的正是后者。

概述

    这篇文章的目的主要是为了讲清楚rocketMq消息堆积的概念,我印象中的rocketMq的消息堆积应该分为两层,一层是broker中实际写入消息量和consumeQueue已经消费位移的偏差,另外一层consumer端本身已经拉取消息的堆积,而今天要讲的正是后者。

    这个问题的起源是当时有个其他公司的同事遇到consumer端不停的gc,然后开始谈论起这个话题,然后我就按照我的理解给他解释了一遍,结果发现的确是那么回事,所以才有了这篇记录。我觉得我应该能够把整个过程讲清楚。

    PS,这个是在rocketMq的push模式下才会遇到的情况,pull场景下由于自行控制拉取速度,所以不太可能出这个问题。


push消费模式

    1、push消费模式本质上其实一个pull的过程,consumer本质上在执行两个阶段的任务,阶段一是负责从broker端pull消息到consumer端,阶段二负责将拉取的消息push到consumer注册的回调当中。

    2、阶段一的pull过程需要其实是一个多个维度的过程,假设我们的broker集群包含3个broker节点,在这个集群上我们创建了一个topic并且topic指定的队列个数为6,那么在这个场景下我们总共有3*6=18个队列,其中3是3个broker,6是每个topic的队列数。

    3、在步骤2的基础上,假设我们的consumerGroup只有一个consumer,那么这个consumer就需要负责消费18个队列。

    4、由于每个queue的拉取都是由单独任务在驱动的,所以总共有18个拉取任务,由一个线程的串行进行拉取,拉取完后再次重复提交进行二次拉取过程,循环往复持续拉取数据。

    5、拉取过程中如果发现消息数据条数超过1000条,或者消息量超过100M,那么我们就暂停消息拉取,延迟50ms后再次发起任务拉取。


push模式下消息堆积

    1、在18个队列的模式下,假设我们的consumer消费非常慢的话,理论上我们能够堆积100M*18=1800M=1.8G,假设这个consumer同时订阅多个topic的话,假设3个topic,那么就会超过1.8G*3=5.4G。在这种情况下很容易发生gc。    


push模式下代码分析


img_09c1371abc5e70e586f5d4d08f4c3e57.png
push-pull-1
img_e4ce52f643dc8d517e526346871b9fbb.png
push-pull-2
img_935a8a827d5f9571b6ab51927d332bd6.png
push-pull-3
img_6e065d70179abdf0ac78b5e2f4a2b513.png
push-pull-4
img_da9f75f8acf93ebb214cbf508d4dfd16.png
push-pull-5
img_0cbb940ce5781ca4aa8d551d757cfd68.png
push-pull-6
相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
6月前
|
消息中间件 Dubbo Java
如何应对RocketMQ消息堆积
很多同学都在使用 RocketMQ 时,经常会遇到消息堆积的问题。这篇文章,我们聊聊消息堆积的概念,以及如何应对消息堆积。
1237 1
|
消息中间件 算法 Java
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
608 1
弥补延时消息的不足,RocketMQ 基于时间轮算法实现了定时消息!
|
消息中间件 存储 缓存
RocketMQ 监控告警:生产环境如何快速通过监控预警发现堆积、收发失败等问题?
本文主要向大家介绍如何利用 RocketMQ 可观测体系中的指标监控,对生产环境中典型场景:消息堆积、消息收发失败等场景配置合理的监控预警,快速发现问题,定位问题。
957 0
RocketMQ 监控告警:生产环境如何快速通过监控预警发现堆积、收发失败等问题?
|
8月前
|
消息中间件 弹性计算 Java
RocketMQ-没有消费者的消息堆积场景分析
RocketMQ-没有消费者的消息堆积场景分析
240 1
|
8月前
|
消息中间件 Arthas 监控
一次RocketMQ ons SDK Bug导致消息不断堆积到重试队列的案例分析
一次RocketMQ ons SDK Bug导致消息不断堆积到重试队列的案例分析
313 1
|
9月前
|
消息中间件 存储 Arthas
MQ-消息堆积-JDK Bug导致线程阻塞案例分析
一个JDK BUG导致系统LOAD高的案例分析
148 0
|
9月前
|
SQL Arthas 监控
MQ-消息堆积-业务线程阻塞案例分析
使用arthas定位【MQ-消息堆积】的原因
192 1
|
消息中间件 Apache RocketMQ
《万亿级数据洪峰下的消息引擎——Apache RocketMQ》电子版地址
万亿级数据洪峰下的消息引擎——Apache RocketMQ
312 0
《万亿级数据洪峰下的消息引擎——Apache RocketMQ》电子版地址
|
消息中间件 存储 缓存
RocketMQ Schema——让消息成为流动的结构化数据
RocketMQ Schema 提供了对消息的数据结构托管服务,同时为原生客户端提供了较为丰富的序列化/反序列化 SDK ,补齐了 RocketMQ 在数据治理和业务上下游解耦方面的短板,让数据成为流动的结构化数据,那么快来了解下实现原理吧~
470 0
RocketMQ Schema——让消息成为流动的结构化数据
|
消息中间件 存储 缓存
简述RocketMQ消息拉取过程【二】
简述RocketMQ消息拉取过程【二】
906 1