Apache kafka 获得;org.apache.kafka.common.network.InvalidReceiveException:无效接收(大小=1195725856大于104857600)";

Apache kafka 获得;org.apache.kafka.common.network.InvalidReceiveException:无效接收(大小=1195725856大于104857600)";,apache-kafka,Apache Kafka,我安装了动物园管理员和卡夫卡, 第一步: 通过以下命令运行zookeeper: bin/zkServer.sh start bin/zkCli.sh 第二步: 运行kafka服务器 bin/kafka-server-start.sh config/server.properties kafka应在本地主机上运行:9092 但我得到了以下错误: WARN Unexpected error from /0:0:0:0:0:0:0:1; closing connection (org.apache

我安装了动物园管理员和卡夫卡, 第一步: 通过以下命令运行zookeeper:

bin/zkServer.sh start
bin/zkCli.sh
第二步: 运行kafka服务器

bin/kafka-server-start.sh config/server.properties
kafka应在本地主机上运行:9092

但我得到了以下错误:

WARN Unexpected error from /0:0:0:0:0:0:0:1; closing connection (org.apache.kafka.common.network.Selector)
org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 1195725856 larger than 104857600)
我正在以下链接:


我是卡夫卡新手,请帮我设置。

尝试将
$kafka_HOME/config/server.properties
文件中的
socket.request.max.bytes
值重置为大于您的数据包大小,然后重新启动卡夫卡服务器。

我最初的猜测是您可能试图接收的请求太大。最大大小是socket.request.max.bytes的默认大小,即100MB。因此,如果有大于100MB的消息,请尝试在
server.properties
下增加此变量的值,并确保在重试之前重新启动群集


如果上述方法不起作用,那么很可能您正在尝试连接到非SSL侦听器。 如果您正在使用端口的默认代理,则需要验证:9092是该代理上的SSL侦听器端口

比如说,

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

应该为您执行此操作(请确保在重新配置这些属性后重新启动Kafka)

答案很可能在这两个方面中的一个

a。socket.request.max.bytes

b。您正在使用非SSL端点连接生产者和消费者

注意:您运行的端口实际上并不重要。确保如果您有ELB,ELB将返回所有健康检查以确保成功

就我而言,卡夫卡前面有一个AWS ELB。我已将Listernet协议指定为TCP,而不是安全TCP。这引发了问题

#listeners=PLAINTEXT://:9092
inter.broker.listener.name=INTERNAL
listeners=INTERNAL://:9093,EXTERNAL://:9092
advertised.listeners=EXTERNAL://<AWS-ELB>:9092,INTERNAL://<EC2-PRIVATE-DNS>:9093
#监听器=纯文本://:9092
inter.broker.listener.name=内部
监听器=内部://:9093,外部://:9092
播发。侦听器=外部://:9092,内部://:9093
listener.security.protocol.map=内部:SASL_明文,外部:SASL_明文 sasl.enabled.mechanisms=PLAIN sasl.mechanism.inter.broker.protocol=PLAIN

下面是我的producer.properties和consumer.properties的一个片段,用于外部测试

bootstrap.servers=<AWS-ELB>:9092
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
bootstrap.servers=:9092
security.protocol=SASL\u SSL
sasl.机构=普通

1195725856是
GET[space]
编码为四字节的大端整数(有关如何工作的更多信息,请参阅)。这表示HTTP流量正在发送到Kafka端口9092,但Kafka不接受HTTP流量,它只接受自己的协议(将前四个字节作为接收大小,因此出现错误)

由于该错误是在启动时收到的,因此它可能是良性的,并且可能表示您的网络扫描端口上有扫描服务或类似服务,而Kafka不了解这些协议

为了找到原因,您可以使用tcpdump查找HTTP流量的来源:

tcpdump -i any -w trap.pcap dst port 9092
# ...wait for logs to appear again, then ^C...
tcpdump -qX -r trap.pcap | less +/HEAD

总的来说,这可能很烦人,但无害。至少卡夫卡没有实际分配/弄脏内存。:-)

安装卡夫卡、麋鹿和卡夫德罗普设置后,我就是这样解决这个问题的:

  • 首先逐个停止与Kakfa接口的每个应用程序 追查违规服务

  • 解决该应用程序的问题

  • 在我的设置中是Metricbeats

    通过编辑modules.d子文件夹中的Metricbeats kafka.yml设置文件解决了此问题:

  • 确保server.properties中的Kafka advertised.listener已启用 在hosts属性中引用

  • 取消对度量集和客户端id属性的注释

  • 生成的kafka.yml如下所示:

    # Module: kafka
    # Docs: https://www.elastic.co/guide/en/beats/metricbeat/7.6/metricbeat-module-kafka.html
    
    # Kafka metrics collected using the Kafka protocol
    - module: kafka
      metricsets:
        - partition
        - consumergroup
    period: 10s
    hosts: ["[your advertised.listener]:9092"]
    
    client_id: metricbeat
    

    在我的例子中,其他一些应用程序已经在向端口9092发送数据,因此服务器启动失败。关闭应用程序解决了此问题。

    可能会有所帮助。这可能与您的消费者如何连接到代理有关。默认情况下,接收大小为1M。您可能还想了解max.message.bytes=20000000 message.max.bytes=20000000,但如何在启动卡夫卡时出错。它说收到的消息大于设置的大小。但我们还没有完全启动卡夫卡开始接收。我遗漏了什么吗?但是一个人在开始卡夫卡的时候怎么会出错呢。它说收到的消息大于设置的大小。但我们还没有完全启动卡夫卡开始接收。我错过什么了吗?我们还得到了
    (尺寸=1195725856大于104857600)
    。接收的大小为1195725856 B=1.1 GB。将
    socket.request.max.bytes
    增加到2GB会产生
    java.lang.OutOfMemoryError
    。我应该设置
    KAFKA_HEAP\u OPTS=“-Xms512m-Xmx2g
    。注意
    -Xmx2g
    。这是我们可以指定2GB最大java堆大小的方法吗?@Mahesha999会要求您进行检查。在端口9092上,可能有其他应用程序正在发送数据。