“kafka.zookeeper.ZooKeeperClientTimeoutException:等待连接超时”仅在列出主题期间

Posted

技术标签:

【中文标题】“kafka.zookeeper.ZooKeeperClientTimeoutException:等待连接超时”仅在列出主题期间【英文标题】:"kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection" ONLY DURING LISTING TOPICS 【发布时间】:2020-05-09 03:43:08 【问题描述】:

我发现了几个主题相似但上下文不同的问题:我可以连接以创建主题,但我无法列出主题,因为我收到了下面提到的错误(据我所知,人们面临基本问题在我获取主题列表时连接)。

如果有问题,这里是我的docker-compose.yml

version: "3"
services:
    zookeeper:
        image: wurstmeister/zookeeper

    kafka:
        image: wurstmeister/kafka
        ports:
            - "9092:9092"
        environment:
            KAFKA_ADVERTISED_HOST_NAME: "localhost"
            KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181"

我的控制台:

bash-4.4# kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic test2
Created topic test2.
bash-4.4# kafka-topics.sh --list --zookeeper localhost:2181
Exception in thread "main" kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING
        at kafka.zookeeper.ZooKeeperClient.$anonfun$waitUntilConnected$3(ZooKeeperClient.scala:259)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
        at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:253)
        at kafka.zookeeper.ZooKeeperClient.waitUntilConnected(ZooKeeperClient.scala:255)
        at kafka.zookeeper.ZooKeeperClient.<init>(ZooKeeperClient.scala:113)
        at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1858)
        at kafka.admin.TopicCommand$ZookeeperTopicService$.apply(TopicCommand.scala:321)
        at kafka.admin.TopicCommand$.main(TopicCommand.scala:54)
        at kafka.admin.TopicCommand.main(TopicCommand.scala)

bash-4.4# kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic test3
Created topic test3.
bash-4.4# kafka-topics.sh --list --zookeeper localhost:2181
Exception in thread "main" kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING
        at kafka.zookeeper.ZooKeeperClient.$anonfun$waitUntilConnected$3(ZooKeeperClient.scala:259)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
        at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:253)
        at kafka.zookeeper.ZooKeeperClient.waitUntilConnected(ZooKeeperClient.scala:255)
        at kafka.zookeeper.ZooKeeperClient.<init>(ZooKeeperClient.scala:113)
        at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1858)
        at kafka.admin.TopicCommand$ZookeeperTopicService$.apply(TopicCommand.scala:321)
        at kafka.admin.TopicCommand$.main(TopicCommand.scala:54)
        at kafka.admin.TopicCommand.main(TopicCommand.scala)

已编辑

未来的读者可能会发现,我可以直接从我的 Docker Kafka 容器中列出所有主题,而无需登录我的 Docker Zookeper 容器 (https://***.com/a/56595227/4148175)

C:\Users\>docker exec -it test1_kafka_1 bash

bash-4.4# kafka-topics.sh --list --bootstrap-server localhost:9092
__consumer_offsets
test2
test3
test_topic
bash-4.4# 

【问题讨论】:

【参考方案1】:

--zookeeper zookeeper:2181 似乎运行良好

--zookeeper localhost:2181 在 kafka 容器中总是会失败,因为它没有运行 zookeeper 服务器


我可以直接从我的 Docker Kafka 容器中列出所有主题,而无需登录我的 Docker Zookeper 容器

没错。理想情况下,您永远不应该进入 Zookeeper 容器。 Latest kafka versions support using --bootstrap-server instead,所以你可以使用来自 kafka 容器的kafka:9092 localhost:9092

【讨论】:

你肯定回答了我的根本问题。请您在这里补充一下,当您在一个 docker 容器中有 zookeper 并且在另一个容器中有 kafka 时,您将如何列出所有主题?如果你注意到我的 docker-compose 我启动了两个不同的容器。 我觉得我已经回答过了。 Docker 不是问题。在您的命令中缺少正确的服务器地址。 localhost 将始终解析到当前机器/容器,并且始终建议 Zookeeper 不要在真正的 kafka 部署中与 broker 运行在同一台机器上 非常感谢。如果您不介意,最后一个问题:我的问题被否决了?我真的四处搜索,我没有发现任何人在尝试列出主题时遇到同样的错误(好吧,现在我知道它不起作用但似乎我没有尝试过一些毫无价值的东西或周围有很多答案)跨度> 顺便说一句,我终于找到了我想要的东西。我将在上面添加以供将来的读者使用。但当然,您处理我的问题的答案很重要,因此我可以缩小搜索范围。 @DAme 正确,正如我的回答中提到的,--zookeeper 标志正在被弃用

以上是关于“kafka.zookeeper.ZooKeeperClientTimeoutException:等待连接超时”仅在列出主题期间的主要内容,如果未能解决你的问题,请参考以下文章