kafka socket.request.max.bytes=104857600,为什么larger than 524288?

Icuiacd 发表于: 2019-05-22   最后更新时间: 2021-10-28 10:49:41   13,999 游览

socket.request.max.bytes=104857600,配置了这个,但是报错是这个

org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 218762506 larger than 524288)

为什么是524288

报错信息

org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 218762506 larger than 524288)
    at org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:132)
    at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:93)
    at org.apache.kafka.common.security.authenticator.SaslServerAuthenticator.authenticate(SaslServerAuthenticator.java:257)
    at org.apache.kafka.common.network.KafkaChannel.prepare(KafkaChannel.java:81)
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:486)
    at org.apache.kafka.common.network.Selector.poll(Selector.java:424)
    at kafka.network.Processor.poll(SocketServer.scala:628)
    at kafka.network.Processor.run(SocketServer.scala:545)
    at java.lang.Thread.run(Thread.java:748)
发表于 2019-05-22
添加评论

我又回看了这个问题,调整

socket.request.max.bytes

是没错的,同时也要调大jvm(因为接收数据量变大了,jvm也必须调大,否则会oom):

kafka启动脚本kafka-server-start.sh中指定了kafka启动时需要的最小内存,默认为1G

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

修改脚本 kafka-server-start.sh 中的启动内存。

最后,我依然是觉得参数没有生效,kafka必须依次重启才能生效。

能解释下接受数量变大的根本原因吗 是因为消费的速度跟不上导致的吗

不是消费者的,是生产者发给kafka的数据大小和数据量增加了导致超过了默认值。
kafka默认一次socket请求最多处理100MB数据。

好的 谢谢 那怎么抓取发给kakfa的数据大小呢

沐榕樰 -> 半兽人 2年前

我理解是broker配置socket.request.max.bytes默认是100MB,应该是跟生产者设置的max.request.size有关吧,如果max.request.size大于socket.request.max.bytes,应该会报这个错,max.request.size这个设置又是由batch.size组成,我有一个疑问是:topic的消息大小限制:max.message.bytes有啥关系,这个是broker的限制消息的大小?
官网的配置参考:https://kafka.apache.org/documentation/#producerconfigs

524288 看起来是源码硬编码限制的 kafka 源码 SaslServerAuthenticator.java 这个文件可以看见

public class SaslServerAuthenticator implements Authenticator {
// GSSAPI limits requests to 64K, but we allow a bit extra for custom SASL mechanisms
static final int MAX_RECEIVE_SIZE = 524288;
private static final Logger LOG = LoggerFactory.getLogger(SaslServerAuthenticator.class);
Icuiacd -> 影法师 4年前

好的,我也看下

Jabez -> 影法师 1年前

就这一个说到点上了

🏃‍♂️ -> Jabez 1年前

感觉楼上说的对 但是这个问题 搜遍全网 也没人具体分析解决下

WARN Unexpected error from /10.144.100.176; closing connection (org.apache.kafka.common.network.Selector)
org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 1195725856 larger than 104857600)
        at org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:91)
        at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:71)
        at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:154)
        at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:135)
        at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:343)
        at org.apache.kafka.common.network.Selector.poll(Selector.java:291)
        at kafka.network.Processor.poll(SocketServer.scala:476)
        at kafka.network.Processor.run(SocketServer.scala:416)
        at java.lang.Thread.run(Thread.java:748)

在公司主机部署是好的。换了台就不行了

半兽人 -> 小鱼杰杰 5年前

调大socket.request.max.bytes

小鱼杰杰 -> 半兽人 5年前

你有微信吗?不行的。调大内存溢出,然后修改kafka的内存,又报java.lang.OutOfMemoryError: Direct buffer memory。来来回回弄了很久

小鱼杰杰 -> 半兽人 5年前

前辈我好急呀。我的扣扣是823758653

半兽人 -> 小鱼杰杰 5年前

你这个OutOfMemoryError,要调大jvm的。

半兽人 -> 半兽人 5年前

kafka启动脚本kafka-server-start.sh中指定了kafka启动时需要的最小内存,默认为1G

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

修改脚本 kafka-server-start.sh 中的最小启动内存。

小鱼杰杰 -> 半兽人 5年前

调了,看着网上的export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G",我改成2,后面陆续出错,都加了

半兽人 -> 小鱼杰杰 5年前

陆续出错 啥错呢?

有后续吗 我遇到跟你一样的问题

你好,我的报错是

[2020-02-09 18:09:31,071] WARN [SocketServer brokerId=1] Unexpected error from /192.168.53.28; closing connection (org.apache.kafka.common.network.Selector)
org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = -720899)
    at org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:130)
    at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:93)
    at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:235)
    at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:196)
    at org.apache.kafka.common.network.Selector.attemptRead(Selector.java:557)
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:495)
    at org.apache.kafka.common.network.Selector.poll(Selector.java:424)
    at kafka.network.Processor.poll(SocketServer.scala:628)
    at kafka.network.Processor.run(SocketServer.scala:545)
    at java.lang.Thread.run(Thread.java:748)

这个是什么意思?与 Invalid receive (size = 1195725856 larger than 104857600)只差一点点

我的也是报这个错误,请问这个是怎么解决的吗,谢谢了,万分感谢,我的qq1260253838

重启之后没有复现过了,我也摸不准什么原因

重启了吗。。

一直配的是这个大小,期间重启过好多次

海阔天空 -> Icuiacd 4年前

这个问题你解了吗?我们也遇到了

Adore -> 海阔天空 3年前

大佬,有解决方案吗

broker.id=1
listeners=SASL_PLAINTEXT://。。。。。。。。。。。。。。
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
super.users=。。。。。。。。。。。。。。
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
num.network.threads=3
num.io.threads=8
auto.create.topics.enable=false
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
max.connections.per.ip=500
log.dirs=。。。。。。。。。。。。。。
num.partitions=3
num.recovery.threads.per.data.dir=1
default.replication.factor=3
log.retention.hours=768
log.retention.bytes=1099511627776
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.cleaner.enable=false
zookeeper.connect=。。。。。。。。。。。。。。
zookeeper.connection.timeout.ms=6000
password.encoder.secret=null

部分信息隐去了

message.max.bytes 这个呢?

Icuiacd -> 半兽人 5年前

message.max.bytes = 1000012

启动日志是这个,我刚自己压测也是

org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 104957440 larger than 104857600)

说明104857600这个没问题吧,看启动日志,和524288有关的只有:

log.cleaner.io.buffer.size = 524288
offsets.load.buffer.size = 5242880
transaction.state.log.load.buffer.size = 5242880

这三个

半兽人 -> Icuiacd 5年前

错误日志里 应该有建议你改哪个参数的呀。

半兽人 -> Icuiacd 5年前

你测试的场景描述下呀。

Icuiacd -> 半兽人 5年前

出现524288是集群其他的生产者,我测试的调整buffer.memory batch.size max.request.size都是104957800,大于104857600,每次发送1000byte的数据,同一个分区99999999次

半兽人 -> Icuiacd 5年前

嗯,我猜你已经熟悉这些参数了。

小鱼杰杰 -> 半兽人 5年前
WARN Unexpected error from /10.144.100.176; closing connection (org.apache.kafka.common.network.Selector)
org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 1195725856 larger than 104857600)
        at org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:91)
        at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:71)
        at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:154)
        at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:135)
        at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:343)
        at org.apache.kafka.common.network.Selector.poll(Selector.java:291)
        at kafka.network.Processor.poll(SocketServer.scala:476)
        at kafka.network.Processor.run(SocketServer.scala:416)
        at java.lang.Thread.run(Thread.java:748)

在公司主机部署是好的,换台生产的就不行了。一直报这个。生产上面试了六台,同样问题。求大神看下

最后怎么解决的,我也遇到这个问题了

你的答案

查看kafka相关的其他问题或提一个您自己的问题