Kafka 3节点集群zookeeper无法连接

时间:2017-07-31 12:41:43

标签: apache-kafka apache-zookeeper

我一直在努力使用3节点Kafka群集设置。我已经查看了所有的SO答案,似乎正在做一切正确的事情。但是,Zookeeper无法同步,因此kafka服务器无法连接。

这是我的zookeeper配置

dataDir=/home/kafka/zookeeper/data
# the port at which the clients will connect
clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=50
server.1=0.0.0.0:2888:3888
server.2=139.59.80.73:2888:3888
server.3=139.59.80.76:2888:3888
initLimit=5
syncLimit=2

在每个其他服务器上,我已按照其中一个SO答案中的建议将server.id设置为0.0.0.0。所以server.2在第二台机器上将有0.0.0.0。我已经仔细检查了数据目录中的myid文件以获得相应的ID。

即使在等待一段时间后,动物园管理员服务也没有同步,我一直看到这些例外情况:

2017-07-31 12:40:49,110] WARN Cannot open channel to 1 at election address /139.59.80.4:3888 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.net.NoRouteToHostException: No route to host (Host unreachable)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:562)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:538)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:452)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:433)
    at java.lang.Thread.run(Thread.java:748)

困扰我的是我可以通过端口2181远程登录到彼此的机器,但是zookeeper服务无法连接。完全是困惑的。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

原来是一个端口问题。必须打开以下端口2888和3888。我在Linux上禁用了IPTables,但似乎从来没有工作过。我搬到了AWS并打开了两个端口,zookeeper开始很好。

答案 1 :(得分:0)

我已在RedHat Linux的4个计算机集群上以集成模式安装了zookeeper。在尝试所有形式的stackoverflow之后,我遇到了同样的问题,我关闭了所有机器上的iptables和防火墙,但是仍然出现错误,经过一番思考之后,我厌倦了为所有机器启用无密码ssh,这解决了我现在的问题在所有4台计算机上均已启动并运行

答案 2 :(得分:0)

这是一个很老的问题,但是我遇到了同样的问题,并希望分享我的解决方案。我在Centos 7中遇到了这个问题。

首先,您可以telnet到ip_addr:3888以确保未到达该主机/端口:

telnet ip_addr 3888
telnet ip addr 2888

第二,您可以先停止防火墙,然后再次进行telnet,以确保这是防火墙问题:

sudo systemctl stop firewalld.service

如果在那之后工作,那绝对是防火墙问题。 要解决该问题,您应该打开端口:

 sudo firewall-cmd --zone=public --add-port=3888/tcp --permanent
 sudo firewall-cmd --zone=public --add-port=2888/tcp --permanent
 sudo firewall-cmd --reload