Adjusted frame length exceeds 1677216:16777318-discarded

问题背景

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

问题原因

经定位,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

你可能感兴趣的:(RocketMQ,java-rocketmq)