RocketMQ消息堆积判断

2024-08-28 00:08
文章标签 判断 消息 rocketmq 堆积

本文主要是介绍RocketMQ消息堆积判断,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 机器部署

1、机器组成

7台机器,均为16G内存  

每台服务器均有4个CPU,2核

 

2、运行环境配置

3、刷盘方式

每台机器master机器均采用异步刷盘方式

 

 

 

 

二 性能评测

1、评测目的

   测试rocketmq是否存在消息堆积场景。

  

2、评测指标

    producer发送消息的maxOffset与consumer消费消息的currOffset的差异值

    给定的常量消息堆积数值。

   

3、评测逻辑

  若消息offset的差异值 大于 常量堆积数值,则认为存在消息堆积的情况。

    反之则不存在消息堆积。

  

  

4、评测过程

       (1)producer端向topic名称为“orderTopicTest”的队列发送海量消息,定为40000条。

    (2)consumer端订阅特定名称的topic,并进行消费。每次消费消息,记录当前消息的Offset;并根据“MAX_OFFSET”关键字,从当前消息对象获取消息最大偏移量的属性值,然后计算偏移量MAX_OFFSET与offset的差异值。关键代码如下:

 

(3)发送消息,记录发送的消息及其相关日志。

      如果消息偏移量offset的差异值 大于 给定的消息堆积个数值,则记录日志,说明存在消息堆积的情况。反之则不存在消息堆积。产生的日志如下

 

 

 

   (4)消息堆积处理

    从日志看出,因producer端先运行了好一会儿,已经产生了741个消息挤压;

    随着consumer消费服务开启,消息一边产生,一边消费,整体来说消息消费的速率高于消息产生的速率,所以消息offset的差异值在不断的减少,故第二个截图的情况存在:消息offset的差异值小于阈值100,所以存在正常消费与消息堆积的混合情况。

    consumer继续消费消息,producer产生消息的速率跟不上consumer的消费速率,故第三图就已经是正常消息消费了,即此时的消息堆积的那一部分消息已被消费。

   

    (5)注意事项

    rocketmq官网文档指出,集群在有Slave情况下,Master一旦发现Consumer访问堆积在磁盘的数据时,访问堆积在磁盘的数据时,会向consumer下达一个指令,命令consumer从slave拉取数据,这样使得正常发消息的consumer与正常消费消息的consumer都不会收到影响。

   此种情况前提:

    A)集群存在salve机器

    B)consumer存在消息堆积

    C)consumer因某种原因访问磁盘数据(而非访问pageCache等内存数据)

    这种情况的场景要求苛刻,需要在高并发的场景下才可能出现;此外,生产环境的集群配置,出现消息堆积的情况,还有可能是受到磁盘大小、网络因素等等原因,本次测试并未深入到此场景,留待后续进一步测试。

 

 

二 评测结果

     1、消息堆积是一个相对值,针对consumer消费消息,某个topic队列中最大的maxOffset与当前消费消息的currOffset的差异值,大于某个特定的阈值,才会出现消息堆积。

    2、当发送消息高于消息消费的速率,则可能出现消息堆积。

    3、其他条件保存正常水平,存在消息堆积的那一部分消息会随着时间不断减少直至消息被消费。

    4、针对过多的消息堆积,可以选择丢弃不重要的消息,即仅仅记录日志,而不真正消费,以此保证消息的完整性,以此来特殊处理消息的堆积情况。

这篇关于RocketMQ消息堆积判断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1113174

相关文章

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)

poj 3259: 题意:John的农场里n块地,m条路连接两块地,w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。 任务是求你会不会在从某块地出发后又回来,看到了离开之前的自己。 判断树中是否存在负权回路就ok了。 bellman代码: #include<stdio.h>const int MaxN = 501;//农场数const int

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

zoj 1721 判断2条线段(完全)相交

给出起点,终点,与一些障碍线段。 求起点到终点的最短路。 枚举2点的距离,然后最短路。 2点可达条件:没有线段与这2点所构成的线段(完全)相交。 const double eps = 1e-8 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

【408DS算法题】039进阶-判断图中路径是否存在

Index 题目分析实现总结 题目 对于给定的图G,设计函数实现判断G中是否含有从start结点到stop结点的路径。 分析实现 对于图的路径的存在性判断,有两种做法:(本文的实现均基于邻接矩阵存储方式的图) 1.图的BFS BFS的思路相对比较直观——从起始结点出发进行层次遍历,遍历过程中遇到结点i就表示存在路径start->i,故只需判断每个结点i是否就是stop

linux 判断某个命令是否安装

linux 判断某个命令是否安装 if ! [ -x "$(command -v git)" ]; thenecho 'Error: git is not installed.' >&2exit 1fi

ActiveMQ—消息特性(延迟和定时消息投递)

ActiveMQ消息特性:延迟和定时消息投递(Delay and Schedule Message Delivery) 转自:http://blog.csdn.net/kimmking/article/details/8443872 有时候我们不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数。。。 类似

【Rocketmq入门-基本概念】

Rocketmq入门-基本概念 名词解释名称服务器(NameServer)消息队列(Message Queue)主题(Topic)标签(Tag)生产者(Producer)消费者(Consumer)拉取模式(Pull)推送模式(Push)消息模型(Message Model) 关键组件Broker消息存储工作流程 名词解释 名称服务器(NameServer) 定义: 名称服务器