gpt4 book ai didi

linux - 虚拟机中docker中与kafka的连接

转载 作者:太空宇宙 更新时间:2023-11-04 04:51:55 24 4
gpt4 key购买 nike

我正在尝试将 wurstmeister\kafka-docker 图像与 docker-compose 一起使用,但我在连接所有内容时遇到了真正的问题。

我正在使用 Oracle Linux 7.6 作为基于 XEN 主机服务器的 guest 操作系统,因此我在此虚拟机中没有虚拟化。

我正在尝试与一个代理连接,因此我使用了docker-compose-single-broker.yml:

version: '2'services:  zookeeper:    image: wurstmeister/zookeeper    ports:      - "2181:2181"  kafka:    build: .    ports:      - "9092:9092"    environment:      KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1      KAFKA_CREATE_TOPICS: "test:1:1"      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181    volumes:      - /var/run/docker.sock:/var/run/docker.sock

所以当我运行 docker-compose -f docker-compose-single-broker.yml up 时一切看起来都不错:

kafka_1      | creating topics: test:1:1zookeeper_1  | 2019-04-23 12:32:16,680 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@215] - Accepted socket connection from /172.24.0.2:50096zookeeper_1  | 2019-04-23 12:32:16,685 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:ZooKeeperServer@949] - Client attempting to establish new session at /172.24.0.2:50096zookeeper_1  | 2019-04-23 12:32:16,690 [myid:] - INFO  [SyncThread:0:ZooKeeperServer@694] - Established session 0x100476bb75e0001 with negotiated timeout 30000 for client /172.24.0.2:50096zookeeper_1  | 2019-04-23 12:32:17,161 [myid:] - INFO  [ProcessThread(sid:0 cport:2181)::PrepRequestProcessor@487] - Processed session termination for sessionid: 0x100476bb75e0001zookeeper_1  | 2019-04-23 12:32:17,165 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1056] - Closed socket connection for client /172.24.0.2:50096 which had sessionid 0x100476bb75e0001

之后,我打开新终端并运行 ssh: docker run --rm -v/var/run/docker.sock:/var/run/docker.sock -e HOST_IP=172.17.0.1 -e ZK=172.17.0.1:2181 -i -t kafka-docker_kafka/bin/bash

但是当我尝试创建新主题时:

kafka-topics.sh --create --topic topicELO --partitions 4 --zookeeper $ZK --replication-factor 1

我有异常(exception):

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:242)        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)        at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:251)        at kafka.zookeeper.ZooKeeperClient.waitUntilConnected(ZooKeeperClient.scala:238)        at kafka.zookeeper.ZooKeeperClient.(ZooKeeperClient.scala:96)        at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1825)        at kafka.admin.TopicCommand$ZookeeperTopicService$.apply(TopicCommand.scala:262)        at kafka.admin.TopicCommand$.main(TopicCommand.scala:53)        at kafka.admin.TopicCommand.main(TopicCommand.scala)

我还尝试了 localhost 和我机器的 IP - 相同的结果。

当我尝试在 Windows 版 Docker 中使用 host.docker.internal 执行此操作时,一切正常 - 我在 Linux 上哪里犯了错误?

最佳答案

您需要添加 --network 选项,使其与 docker run 命令上的 Docker-Compose 网络同名。

否则,您的“新容器”将不会与 Zookeeper 容器位于同一网络中,因此连接将超时。

完成此操作后,您不需要 -e ZK,因为您只需使用 kafka-topics --zookeeper Zookeeper:2181 (容器服务名称)

使用 docker network ls 并查找包含您启动 docker-compose 的目录名的目录

<小时/>

不过,更快的方法是这样做

docker-compose exec kafka bash -c“kafka-topics --create --zookeeper Zookeeper:2181 ...”

<小时/>

注意:KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1 不是“正确的”,因为您会告诉任何外部 Kafka 客户端连接到自身(在 127.0.0.1 上),而不是实际的 Kafka 容器。 more details here

关于linux - 虚拟机中docker中与kafka的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55811494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com