Kafka InvalidReceiveException无效的接收

时间:2018-08-27 13:34:20

标签: apache-kafka

我们在测试和生产中得到了这个。 它是连续的,我们不知道这些错误如何每隔几秒钟出现一次,至少在测试中我们似乎没有来自其他系统的提要。

我们有非常小的消息,充其量只有几百个字节。

这是1.2 GB。我尝试将设置:socket.request.max.bytes设置为1195725856,但是即使堆大小约为2.5 GB且OpenShift容器设置为最大32GB,也出现内存不足的情况。

非常欢迎任何帮助!

org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 1195725856 larger than 104857600)
    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.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:545)
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:483)
    at org.apache.kafka.common.network.Selector.poll(Selector.java:412)
    at kafka.network.Processor.poll(SocketServer.scala:551)
    at kafka.network.Processor.run(SocketServer.scala:468)
at java.lang.Thread.run(Thread.java:748)

5 个答案:

答案 0 :(得分:1)

听起来像协议问题不匹配;也许您正在尝试连接到非SSL监听器。 如果使用端口的默认代理,则需要验证:9092是该代理上的SSL侦听器端口。

例如

listeners=SSL://:9092
advertised.listeners=SSL://:9092
inter.broker.listener.name=SSL

应该为您解决问题(确保在重新配置这些属性后重新启动Kafka)。

或者,您可能正在尝试接收太大的请求。最大大小是socket.request.max.bytes的默认大小,即100MB。因此,如果收到的消息大于100MB,请尝试增加server.properties下此变量的值。

答案 1 :(得分:0)

我们的错是在Openshift中卷曲Kafka端口以进行“活动探测”。 CURL是Http客户端,Kafka使用TCP。

将改用NetCat。

答案 2 :(得分:0)

此问题通过移除弹簧解决。卡夫卡Ssl。生产者的协议属性。
当kakfka经纪人不支持Ssl但生产者这样做时,就会出现此问题。它与大小无关。因为生产者发送消息超过100 mbs的可能性很小。

花了将近90分钟来解决此SSL问题,因为我在配置Bean内有一个自定义的kafka生产者。

答案 3 :(得分:0)

在本地安装Zookeeper和Kafka时遇到相同的错误

通过增加#KAFKA_HOME \ config \ server.properties而解决了该问题

-- Dafult value - 104857600
# The maximum size of a request that the socket server will accept (protection against OOM)
socket.request.max.bytes=500000000

答案 4 :(得分:0)

我在 “InvalidReceiveException: Invalid receive (size = 1195725856 than 104857600)” 中挣扎了将近一整天,直到最后我在调试模式下运行我的测试并且几乎逐行-线。对我来说,事实证明我已经将一些 kafka env 变量值(在本例中为 KAFKA_KEY 和 KAFKA_SECRET)放入我的 .zshrc 中以与 kafkacat 一起使用。我几乎不知道我的 docker 容器也在获取这些值并尝试将它们与我的开发环境一起使用,这导致它出现类似于上述 SSL 与非 SSL 协议不匹配的问题。所以我只是重命名了我的 .zshrc 中的变量,之后一切正常。