java工程日志报错:
org.springframework.kafka.support.LoggingProducerListener - Exception thrown when sending a message with key='5f5ae841d5de035777194fb1' and payload='{"deliverTime":1724037680384,"yzj-kafka-header-field":{"X-Hybrid-partition-key":"5f5ae841d5de0357771...' to topic test:
org.apache.kafka.common.errors.RecordTooLargeException: The message is 4370526 bytes when serialized which is larger than the maximum request size you have configured with the max.request.size configuration.
org.apache.kafka.common.errors.RecordTooLargeException: The message is 4370526 bytes when serialized which is larger than the maximum request size you have configured with the max.request.size configuration.
在线数据大小换算器
https://tool.netss.cn/calcdata/
![](https://img.haomeiwen.com/i12979420/f69de6de6a7ad9a7.png)
报错信息表明在向 Kafka 主题 test
发送消息时发生了 RecordTooLargeException
异常。具体的错误原因是消息的大小(4370526 字节)超过了 Kafka 服务器配置的 max.request.size
限制。这种情况通常需要调整 Kafka 的配置以处理更大的消息。下面是详细的解读和处理步骤:
错误解析
-
错误类型:
RecordTooLargeException
-
错误描述: 消息的大小(4370526 字节)超过了 Kafka 服务器允许的最大请求大小(由
max.request.size
参数配置)。 - 异常发生: 当尝试发送消息时,Kafka 客户端发现消息超出了服务器配置的最大允许大小,导致消息发送失败。
处理步骤
1. 调整 Kafka 服务器配置
你需要修改 Kafka 服务器的 server.properties
配置文件,增加 max.request.size
和 message.max.bytes
的值。这两个配置项分别控制客户端和服务器端允许的最大请求和消息大小。请执行以下步骤:
-
修改
server.properties
文件:- 找到 Kafka 服务器的配置文件
server.properties
。 - 增加或修改以下配置项:
# 允许的最大消息大小(字节) message.max.bytes=5000000 # 根据需要设置合适的值,这里设为 5 MB # 允许的最大请求大小(字节) replica.fetch.max.bytes=5000000 # 同样设置为合适的值,通常要大于 message.max.bytes
- 找到 Kafka 服务器的配置文件
-
重启 Kafka 服务器:
- 修改配置文件后,需要重启 Kafka 服务器使配置生效。
2. 调整 Kafka 客户端配置
除了服务器端配置,你还需要确保 Kafka 客户端配置与服务器端的限制一致。你可以在 Kafka 客户端的配置中调整以下参数:
-
修改生产者配置:
- 在你的 Kafka 生产者客户端中,增加或修改
max.request.size
配置项。例如,在 Spring Kafka 中,你可以设置:# 最大请求大小(字节) max.request.size=5000000 # 设置为服务器端的值
- 在你的 Kafka 生产者客户端中,增加或修改
-
调整生产者的
batch.size
配置:-
batch.size
配置项控制单个批次的最大字节数。确保这个值不会导致单个消息超过max.request.size
:# 单个批次的最大字节数 batch.size=1000000 # 设置为适当的值
-
-
重新启动生产者应用:
- 修改配置后,需要重新启动 Kafka 生产者应用使配置生效。
总结
要解决 RecordTooLargeException
错误,你需要:
-
增加 Kafka 服务器端的
message.max.bytes
和replica.fetch.max.bytes
配置项,使其足够大以处理你的消息大小。 -
确保 Kafka 客户端的
max.request.size
配置项与服务器端配置一致,并调整生产者的batch.size
以避免消息过大。
通过以上步骤,可以确保 Kafka 系统能够处理更大的消息,并且避免类似的异常发生。
kafka server 的 message.max.bytes 和 replica.fetch.max.bytes 默认值是多少?
Kafka 的 message.max.bytes
和 replica.fetch.max.bytes
配置项有默认值,这些默认值在 Kafka 的不同版本中可能有所不同。以下是常见版本的默认值:
默认值
-
message.max.bytes
: 默认值为 1000000 字节(即 1 MB)。该配置项定义了 Kafka 服务器能够接收的单个消息的最大字节数。如果消息大小超过这个限制,Kafka 会拒绝该消息。
-
replica.fetch.max.bytes
: 默认值为 1024000 字节(即 1 MB 也略大一些)。这个配置项控制从副本获取数据时允许的最大字节数。对于replica.fetch.max.bytes
,虽然默认值在一些版本中可能有所不同,但通常这个值设得较大,以适应复制数据的需要。
配置说明
-
message.max.bytes
: 这个设置主要影响 Kafka 服务器端接收的消息大小。如果你的生产者发送的消息大小超过了这个值,Kafka 会返回RecordTooLargeException
错误。为了处理较大的消息,你可能需要增加这个配置项的值。 -
replica.fetch.max.bytes
: 这个设置控制从主副本到副本传输数据的最大字节数。它确保了副本在进行数据复制时不会因为数据量过大而失败。副本需要能够处理message.max.bytes
的设置值,所以replica.fetch.max.bytes
通常也需要相应的调整。
更新默认值
根据你的需求,你可能需要调整这些默认值。如果你要发送或处理更大的消息,可以按以下步骤更新这些配置:
-
修改 Kafka 服务器配置:
- 在 Kafka 的配置文件
server.properties
中设置message.max.bytes
和replica.fetch.max.bytes
的新值。
- 在 Kafka 的配置文件
-
重启 Kafka 服务器:
- 修改配置后,确保重启 Kafka 服务器以使更改生效。
示例配置
例如,要将消息大小限制增加到 5 MB,可以在 server.properties
中设置如下:
message.max.bytes=5242880
replica.fetch.max.bytes=5242880
然后,重新启动 Kafka 服务器。
在生产环境中进行这样的调整时,请确保所有相关配置(如 Kafka 客户端配置)与这些设置一致,以避免出现不一致的问题。
从工程日志看,业务接口扛住了4M的request body,但是将消息投递到kafka的时候被kafka拒绝了。
注意: 如无特殊要求,一般来说 默认值足够大了,生产者如果投递消息超过1M ,那么需要看调用方是不是哪里搞错了, request body 过大,业务接口能扛住,kafka也顶不住!!!
·
网友评论