为何无法通过浏览器运行Kafka消费者?终端运行正常
问题分析与解决:浏览器访问ZooKeeper端口2181失败
你遇到的问题其实是个常见的误解——ZooKeeper的2181端口并不支持HTTP访问,它使用的是ZooKeeper专属的二进制TCP协议,而浏览器发送的是HTTP请求,两者完全不兼容,这就是日志里出现Len error 1195725856的原因:ZooKeeper把HTTP请求的头部(比如GET / HTTP/1.1这类内容)当成了自己协议的长度字段来解析,自然会报错并关闭连接。
为什么终端里的消费者命令能正常工作?
你用~/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic TutorialTopic --from-beginning能正常消费,是因为Kafka的消费者客户端是通过ZooKeeper的官方协议和它通信的,完全符合ZooKeeper的交互规范,所以没问题。
正确验证ZooKeeper状态的方式
如果想确认ZooKeeper是否正常运行,别用浏览器,试试这些方法:
- 使用ZooKeeper自带的命令行客户端:
进入后可以执行~/kafka/bin/zookeeper-shell.sh localhost:2181stat、ls /等命令查看ZooKeeper的状态和节点信息。 - 用
nc工具快速验证连通性和状态:
这个命令会返回ZooKeeper的运行状态摘要,比如连接数、节点数等。echo stat | nc localhost 2181
你提供的日志细节
ZooKeeper错误日志(执行tail -f /var/log/zookeeper/zookeeper.log):
2018-05-11 18:52:30,098 - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /0:0:0:0:0:0:0:1:46416 2018-05-11 18:52:30,098 - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /0:0:0:0:0:0:0:1:46418 2018-05-11 18:52:30,102 - WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@362] - Exception causing close of session 0x0 due to java.io.IOException: Len error 1195725856 2018-05-11 18:52:30,103 - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1008] - Closed socket connection for client /0:0:0:0:0:0:0:1:46416 (no session established for client) 2018-05-11 18:52:30,103 - WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@362] - Exception causing close of session 0x0 due to java.io.IOException: Len error 1195725856 2018-05-11 18:52:30,103 - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1008] - Closed socket connection for client /0:0:0:0:0:0:0:1:46418 (no session established for client) 2018-05-11 18:52:30,104 - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@192] - Accepted socket connection from /0:0:0:0:0:0:0:1:46420 2018-05-11 18:52:30,105 - WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@362] - Exception causing close of session 0x0 due to java.io.IOException: Len error 1195725856 2018-05-11 18:52:30,106 - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1008] - Closed socket connection for client /0:0:0:0:0:0:0:1:46420 (no session established for client)
Kafka相关日志片段:
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: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)
总结一下:你的Kafka和ZooKeeper服务其实都是正常运行的,只是用错了工具来访问ZooKeeper端口,换成官方的命令行工具就能正常交互了。
内容的提问来源于stack exchange,提问作者Aviral Srivastava
相关产品推荐
相关产品推荐

