Adjusted frame length exceeds 1677216:16777318-discarded

问题背景

消息队列的nameser和broker运行后,在console无法显示,进入broker.lognamesrv.log 显示如下报错Adjusted frame length exceeds 1677216:16777318-discarded
在这里插入图片描述

问题原因

经定位,rocketmq底层集群间使用netty通信,rocketmq在过去的使用中创建了大量的topic以及消费组(代码逻辑是根据时间戳去每次生成新的消费组),这一数据量不断增长,达到netty阈值,导致无法通信

GPT解释(实测无效,需要修改bin/runserver.sh bin/runbroker.sh而不是broker.conf)

com.rocketmq.remoting.frameMaxLength 是 RocketMQ 中的一个属性,用于配置消息传输的最大帧长度。每个消息在传输过程中都会被拆分成多个帧进行传输,该属性用于限制每个帧的最大长度。

要配置 com.rocketmq.remoting.frameMaxLength,你需要编辑 RocketMQ 的配置文件,具体取决于你是使用 Apache RocketMQ 还是 Alibaba RocketMQ。

对于 Apache RocketMQ,你需要编辑 conf/broker.conf(Broker 配置文件)或者 conf/namesrv.conf(NameServer 配置文件),在文件中添加如下配置:

com.rocketmq.remoting.frameMaxLength=xxxx

其中,xxxx 是你希望设置的最大帧长度,单位是字节。

对于 Alibaba RocketMQ,你需要编辑 conf/2m-2s-sync/broker-a.properties(Broker 配置文件)或者 conf/namesrv.properties(NameServer 配置文件),在文件中添加如下配置:

com.rocketmq.remoting.frameMaxLength=xxxx

同样,xxxx 是你想要设置的最大帧长度,以字节为单位。

配置完成后,保存文件并重新启动 RocketMQ 以使配置生效。请注意,修改配置文件可能需要管理员权限。

需要注意的是,com.rocketmq.remoting.frameMaxLength 的默认值是 4MB(4194304 字节),如果你的消息超过这个长度,你可能需要增加该值以支持更大的消息。然而,增加最大帧长度也会增加网络传输的负载和延迟,因此需要根据实际情况进行权衡和调整。

临时解决方案

在rocketmq的bin目录下修改配置

在bin/runserver.sh     bin/runbroker.sh加上一行:
JAVA_OPT="${JAVA_OPT} -Dcom.rocketmq.remoting.frameMaxLength=33554432

重启集群后生效

永久解决方案

修改topic和消费组的生成策略,定期清除

参考文档

https://blog.csdn.net/xxxzzzqqq_/article/details/130102465

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值