2

我想安裝3個卡夫卡經紀人ubuntu EC2機器。但是我在開始zookeeper時得到ConnectException。我的ec2收銀臺的security group中的所有端口已經打開。Zookeeper -Kafka:ConnectException - 連接被拒絕

下面是堆棧跟蹤:

[2016-03-03 07:37:12,040] ERROR Exception while listening (org.apache.zookeeper.server.quorum.QuorumCnxManager) 
java.net.BindException: Cannot assign requested address 
    at java.net.PlainSocketImpl.socketBind(Native Method) 
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376) 
    at java.net.ServerSocket.bind(ServerSocket.java:376) 
    at java.net.ServerSocket.bind(ServerSocket.java:330) 
at org.apache.zookeeper.server.quorum.QuorumCnxManager$Listener.run(QuorumCnxManager.java:507) 
... 
... 
... 

[2016-03-03 07:23:46,093] WARN Cannot open channel to 2 at election address /52.36.XXX.181:3888 (org.apache.zookeeper.server.quorum.QuorumCnxManager) 
    java.net.ConnectException: Connection refused 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:579) 
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368) 
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:402) 
    at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:840) 
    at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:762) 

下面是對配置:

zookeeper.properties

dataDir=/tmp/zookeeper 
clientPort=2181 
maxClientCnxns=0 

server.1=52.37.XX.70:2888:3888 
server.2=52.36.XXX.181:2888:3888 
server.3=52.37.XX.42:2888:3888 
initLimit=5 
syncLimit=2 

server.properties

broker.id=1 
port=9092 
host.name=52.37.XX.70 

num.network.threads=3 
num.io.threads=8 
socket.send.buffer.bytes=102400 
socket.receive.buffer.bytes=102400 
socket.request.max.bytes=104857600 
log.dirs=/tmp/kafka-logs 
num.partitions=3 
num.recovery.threads.per.data.dir=1 
log.retention.hours=168 
log.segment.bytes=1073741824 
log.retention.check.interval.ms=300000 
log.cleaner.enable=false 

zookeeper.connect=52.37.XX.70:2181,52.36.XXX.181:2181,52.37.XX.42:2181 
zookeeper.connection.timeout.ms=6000 

我在/etc/hosts中的實例添加的服務器的公網IP。我的修改/ etc/hosts文件是:

127.0.0.1  localhost localhost.localdomain ip-10-131-X-217 
127.0.0.1  localhost localhost.localdomain 52.37.XX.70 
127.0.0.1 localhost 

# The following lines are desirable for IPv6 capable hosts 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
ff02::3 ip6-allhosts 

獨特myid/tmp/zookeper/myid項也正確。

我按照中提到的所有步驟:How to create a MultiNode - MultiBroker Cluster for Kafka on AWS

回答

3

這個問題是因爲我用的是服務器的Public IP。取而代之的是,使用的ec2實例解決了這個問題。

+3

爲什麼不能使用私有ips,這使得集羣節點之間的數據交換更快。例如,您可以通過通過局域網發生的私有IPS來更快地在kafka節點之間複製數據。 – avr