如何在一个节点上运行两个Zookeeper服务器

时间:2019-06-16 12:46:20

标签: docker apache-kafka apache-zookeeper

我有三个物理节点,每个节点上都安装了Docker。我已经在每个docker上配置了Marathon,Flink,Mesos,Zookeeper和Hadoop。他们真的很好。我必须将数据分发到Flink集群,所以我需要Kafka。 Zookeeper已经运行;因此,Kafka运行没有错误。问题在于,在这种情况下,当我要创建Kafka主题时,会看到此错误,我认为这是因为我没有运行Kafka文件夹中的Zookeeper:

  

线程“主”中的异常kafka.zookeeper.ZooKeeperClientTimeoutException:处于状态:CONNECTING时等待连接超时       在kafka.zookeeper.ZooKeeperClient $$ anonfun $ kafka $ zookeeper $ ZooKeeperClient $$ waitUntilConnected $ 1.apply $ mcV $ sp(ZooKeeperClient.scala:230)中       在kafka.zookeeper.ZooKeeperClient $$ anonfun $ kafka $ zookeeper $ ZooKeeperClient $$ waitUntilConnected $ 1.apply(ZooKeeperClient.scala:226)       在kafka.zookeeper.ZooKeeperClient $$ anonfun $ kafka $ zookeeper $ ZooKeeperClient $$ waitUntilConnected $ 1.apply(ZooKeeperClient.scala:226)       在kafka.utils.CoreUtils $ .inLock(CoreUtils.scala:251)       在kafka.zookeeper.ZooKeeperClient.kafka $ zookeeper $ ZooKeeperClient $$ waitUntilConnected(ZooKeeperClient.scala:226)       在kafka.zookeeper.ZooKeeperClient。(ZooKeeperClient.scala:95)       在kafka.zk.KafkaZkClient $ .apply(KafkaZkClient.scala:1580)       在kafka.admin.TopicCommand $ .main(TopicCommand.scala:57)       在kafka.admin.TopicCommand.main(TopicCommand.scala)

此外,我更改了在Kafka文件夹中使用Zookeeper的计划。为此,我在Kafka文件夹中为Zookeeper配置了新端口,例如 2186,2889,3889 。但是当我使用以下命令运行Zookeeper时:

  /home/kafka_2.11-2.0.0/bin/zookeeper-server-start.sh /home/kafka_2.11-2.0.0/config/zookeeper.properties

我收到此错误:

  

WARN无法在选举地址/10.32.0.3:3889(org.apache.zookeeper.server.quorum.QuorumCnxManager)上打开2频道   java.net.ConnectException:连接被拒绝(连接被拒绝)       在java.net.PlainSocketImpl.socketConnect(本机方法)

     

在java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)

     

在java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)

     

在java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)       在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)       在java.net.Socket.connect(Socket.java:589)

     

在org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:558)

     

在org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:534)

     

在org.apache.zookeeper.server.quorum.FastLeaderElection $ Messenger $ WorkerSender.process(FastLeaderElection.java:454)

     

在org.apache.zookeeper.server.quorum.FastLeaderElection $ Messenger $ WorkerSender.run(FastLeaderElection.java:435)       在java.lang.Thread.run(Thread.java:748)

第一个节点中“ /home/zookeeper-3.4.14/conf/zoo.cfg”中Zookeeper的配置:

    tickTime=2000
    initLimit=10
    syncLimit=5        
    dataDir=/var/lib/zookeeper/data
    clientPort=2181
    server.1=0.0.0.0:2888:3888
    server.2=10.32.0.3:2888:3888
    server.3=10.32.0.4:2888:3888

Kafka文件夹中的Zookeeper配置类似于第一个节点:

     dataDir=/tmp/zookeeper/data
     tickTime=2000
     initLimit=10
     syncLimit=5
     clientPort=2186
     server.1=0.0.0.0:2889:3889
     server.2=10.32.0.3:2889:3889
     server.3=10.32.0.4:2889:3889

请您指导我如何在一个Docker容器中运行两个Zookeeper?顺便说一下,我不能将另一个容器用于Kafka群集,因为我需要两个具有一个公共IP地址的容器。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

问题解决了。我使用了上面的配置,但是两个Zookeeper都使用了 dataDir = / var / lib / zookeeper / data 。另外,首先,我运行Hadoop,然后与Zookeeper运行Kafka。