我已经安装了zookeeper和kafka, 第一步 : 通过以下命令运行zookeeper:
bin/zkServer.sh start
bin/zkCli.sh
第二步:
运行kafka服务器
bin/kafka-server-start.sh config/server.properties
kafka应该在localhost: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的新手,请帮我设置。
答案 0 :(得分:17)
1195725856被GET[space]
编码为大字节序的四字节整数(有关其工作原理的更多信息,请参见here)。这表明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
总的来说,这可能很烦人但无害。至少Kafka实际上并没有分配/弄脏内存。 :-)
答案 1 :(得分:6)
尝试将socket.request.max.bytes
文件中的$KAFKA_HOME/config/server.properties
值重置为超出数据包大小的值,然后重新启动kafka服务器。
答案 2 :(得分: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
下此变量的值。
答案 3 :(得分:1)
这是在安装Kafka,ELK和Kafdrop设置后解决此问题的方法:
首先逐个停止与Kakfa交互的每个应用程序 跟踪有问题的服务。
解决该应用程序的问题。
在我的设置中是Metricbeats。
通过编辑位于modules.d子文件夹中的Metricbeats kafka.yml设置文件来解决该问题:
确保server.properties中的Kafka advertised.listener为 在hosts属性中引用。
取消注释指标集和client_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
答案 4 :(得分:0)
答案最有可能在两个区域之一
a。 socket.request.max.bytes
b。您也使用非SSL端点来连接生产者和使用者。
注意:您运行它的端口确实没有关系。确保如果您有ELB,ELB会返回所有运行状况检查,以确保成功。
就我而言,我在AWS KAFKA前面有一个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
listener.security.protocol.map =内部:SASL_PLAINTEXT,外部:SASL_PLAINTEXT sasl.enabled.mechanisms =普通 sasl.mechanism.inter.broker.protocol = PLAIN
这是我的producer.properties和Consumer.properties的摘录,用于外部测试
bootstrap.servers=<AWS-ELB>:9092
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
答案 5 :(得分:0)
就我而言,其他一些应用程序已经在向端口 9092 发送数据,因此服务器启动失败。关闭应用程序解决了这个问题。