Kafka shell 中的 Docker 错误 : kafka. zookeeper.ZooKeeperClientTimeoutException

标签 docker apache-kafka docker-compose

我正在尝试使用 docker 运行 kafka。

我启动了kafka服务。

docker-compose ps

     Name                        Command               State                         Ports                       

kafka-docker_kafka_1 start-kafka.sh 0.0.0.0:9092->9092/tcp
kafka-docker_zookeeper_1/bin/sh -c/usr/sbin/sshd ... 0.0.0.0:2181->2181/tcp, 22/tcp, 2888/TCP, 3888/TCP

docker-compose.yml

cat docker-compose.yml

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    build: .
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ZOOKEEPER_CONNECTION_TIMEOUT_MS: 36000
      KAFKA_ADVERTISED_PORT: 9092
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

当我尝试通过进入 shell 内部来创建主题时,它抛出以下错误。

./start-kafka-shell.sh kafka zookeeper:2181

bash-4.4# $KAFKA_HOME/bin/kafka-topics.sh --create --topic sentiment --partitions 1 --zookeeper $ZK --replication-factor 1

[2019-02-12 08:07:59,097] WARN Session 0x0 for server zookeeper:2181, unexpected error, closing socket connection and attempting reconnect (org.apache.zookeeper.ClientCnxn)
java.nio.channels.UnresolvedAddressException
    at sun.nio.ch.Net.checkAddress(Net.java:101)
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622)
    at org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java:277)
    at org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO.java:287)
    at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021)
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1064)

尝试了 2 种可能性:

  1. 在将主机名 :zookeeper(尽管我在 docker-compose.yml 中提到过相同)更改为 ip: 0.0.0.0 时出现超时异常

./start-kafka-shell.sh kafka 0.0.0.0:2181

bash-4.4# $KAFKA_HOME/bin/kafka-topics.sh --create --topic sentiment --partitions 1 --zookeeper $ZK --replication-factor 1

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:268)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:251)
    at kafka.zookeeper.ZooKeeperClient.waitUntilConnected(ZooKeeperClient.scala:264)
    at kafka.zookeeper.ZooKeeperClient.<init>(ZooKeeperClient.scala:97)
    at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1694)
    at kafka.admin.TopicCommand$.main(TopicCommand.scala:57)
    at kafka.admin.TopicCommand.main(TopicCommand.scala)
  1. 为了避免上述错误,我在docker-compose.yml中将超时参数从6000增加到36000 --> KAFKA_ZOOKEEPER_CONNECTION_TIMEOUT_MS: 36000

我遇到了同样的超时错误。

最佳答案

有很多预构建的 Kafka 镜像。很难说出您实际想要做什么,但您似乎正在重建图像?还是自己建?

虽然您绝对不需要将 zookeeper 地址作为参数来启动 Kafka

也就是说,0.0.0.0 不是要连接的真实地址。它通常用作绑定(bind)地址,意思是“允许到此服务器的所有连接”

然后 zookeeper 服务名称只能在 Docker 网络中解析,所以这可能解释了为什么你需要 --net,但这意味着你正在使用 docker run 用于某事,鉴于您使用的是 Compose

,这又不清楚

如果你想进入容器的shell,你应该只是使用docker-compose exec kafka bash,而Zookeeper已经是那个容器的环境变量了

类似的东西

docker-compose exec kafka bash -c '$KAFKA_HOME/bin/kafka-topics.sh --create --topic sentiment --partitions 1 --zookeeper $KAFKA_ZOOKEEPER_CONNECT --replication-factor 1'

关于Kafka shell 中的 Docker 错误 : kafka. zookeeper.ZooKeeperClientTimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54647538/

相关文章:

java - 我的 kafka 下载中的 SBT 文件在哪里?

git - Docker:构建上下文并在 Git 中使用 .NET 项目和子模块会导致一个大问题

docker - 如何与每个容器 celery worker 一起使用单独的容器服务?

docker - 如何将 gensim 的 KeyedVectors 对象存储在 Redis 队列工作程序内的全局变量中

docker - 在 Docker Jupyter notebook 的 GUI 中显示卷文件

java - Spring Boot 微服务在 docker 容器内运行时启用 Https

docker - 使用Kafka和Zookeeper运行微服务时docker-compose up错误

docker - 使用 Windows 容器(而不是 Linux 容器)时如何在 Docker for Windows 10 中创建数据卷

java - Kafka控制台消费者获取分区

docker - 无法连接到 Docker 守护进程 http+docker ://localhost with docker-compose