我一直在尝试测试kafka安装并使用指南创建了一个生产者和消费者。尝试检索邮件时出现以下错误:
WARN Session 0x0 for server null, unexpected error, closing socket connection and
attempting reconnect (org.apache.zookeeper.ClientCnxn)
java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1146)
[2014-03-04 18:01:20,628] INFO Terminate ZkClient event thread. (org.I0Itec.zkclient.ZkEventThread)
[2014-03-04 18:01:21,315] INFO Opening socket connection to server kafka-test/192.xxxxxx.110:2182 (org.apache.zookeeper.ClientCnxn)
[2014-03-04 18:01:21,418] INFO Session: 0x0 closed (org.apache.zookeeper.ZooKeeper)
Exception in thread "main" org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeout: 6000
at org.I0Itec.zkclient.ZkClient.connect(ZkClient.java:880)
at org.I0Itec.zkclient.ZkClient.<init>(ZkClient.java:98)
at org.I0Itec.zkclient.ZkClient.<init>(ZkClient.java:84)
at kafka.consumer.ZookeeperConsumerConnector.connectZk(ZookeeperConsumerConnector.scala:151)
at kafka.consumer.ZookeeperConsumerConnector.<init>(ZookeeperConsumerConnector.scala:112)
at kafka.consumer.ZookeeperConsumerConnector.<init>(ZookeeperConsumerConnector.scala:123)
at kafka.consumer.Consumer$.create(ConsumerConnector.scala:89)
at kafka.consumer.ConsoleConsumer$.main(ConsoleConsumer.scala:178)
at kafka.consumer.ConsoleConsumer.main(ConsoleConsumer.scala)
[2014-03-04 18:01:21,419] INFO EventThread shut down (org.apache.zookeeper.ClientCnxn)
答案 0 :(得分:9)
<强>卡夫卡强>
您似乎未正确连接Zookeeper。我不确定你的设置(多机,虚拟机,容器),所以很难说出错是什么。从调试输出中,我看到以下一行暗示您预期的Zookeeper IP:
[2014-03-04 18:01:21,315] INFO Opening socket connection to server kafka-test/192.xxxxxx.110:2182 (org.apache.zookeeper.ClientCnxn)
Kafka在zookeeper.connect
文件中的$KAFKA_HOME/config/server.properties
配置属性指定的地址处查找Zookeeper。在开始Kafka之前一定要编辑它。另外,尝试提供Zookeeper实例的实际公共IP,而不仅仅是127.0.0.1
,因为如果您在容器中运行,这会解决很多混乱。在你的情况下,它看起来像是:
zookeeper.connect=192.xxxxxx.110:2182
如果您在AWS上运行或在容器中运行,也与Kafka配置相关,请不要忘记更新以下两个配置属性,以确保连接到Kafka的客户端看到正确的公共IP
advertised.host.name
advertised.port
和Kafka看到正确的内部IP
host.name
port
<强>动物园管理员强>
Zookeeper在设置时也有一些问题。在Zookeeper实例上,不要忘记编辑server
(通常在zoo.cfg
)文件中的/etc/zookeeper/conf
配置属性,以指向Zookeeper实例的正确IP。在您的情况下可能如下:
server.1=192.xxxxxx.110:2888:3888
只有在您运行Zookeeper群集时才需要最后两个端口(2888 3888)(分别为追随者连接到领导者和Zookeeper领导者选举,所以一定要在防火墙上取消阻止它们,如果你有多个Zookeeper服务器。)
答案 1 :(得分:7)
使用telnet命令检查zookeeper连接:
telnet 192.xxxxxx.110 2181
您可能会收到错误,在这种情况下请检查进程是否正在运行:
ps -ef | grep“zookeeper.properties”
如果它没有运行,请通过进入kafka主目录启动它:
bin / zookeeper-server-start.sh config / zookeeper.properties&amp;
答案 2 :(得分:4)
您的Zookeper
配置出现问题。确保您的zookeeper已启动并正在运行。它运行的默认端口是 2181
我相信更多信息和一些code
可能有用。
答案 3 :(得分:3)
我遇到了同样的问题,问题是zookeeper配置中的max client连接属性。
如果你在/ etc / zookeeper / conf的配置文件中看到类似“maxClientCnxns = 20”的内容,请将其注释掉并重新启动zookeeper。
答案 4 :(得分:1)
您还可以检查所有可用连接是否已用尽。如果您使用API连接到ZK,请确保在完成后释放连接。
答案 5 :(得分:1)
我也遇到了这个问题。当我关闭zk节点的防火墙时,它会工作。