【问题标题】:Cannot connect Kafka running in docker无法连接在 docker 中运行的 Kafka
【发布时间】:2018-06-07 14:41:27
【问题描述】:

我在 docker compose yml 文件中有以下配置用于广告侦听器

我的 docker-compose.yml

  version: '2'
  services:
  zookeeper:
  image: confluentinc/cp-zookeeper:latest
  network_mode: host
  environment:
  ZOOKEEPER_CLIENT_PORT: 32181
  ZOOKEEPER_TICK_TIME: 2000
extra_hosts:
  - "moby:127.0.0.1"

kafka:
image: confluentinc/cp-kafka:latest
network_mode: host
depends_on:
  - zookeeper
environment:
  KAFKA_BROKER_ID: 1
  KAFKA_ZOOKEEPER_CONNECT: localhost:32181
  KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://lnc52c9:29092
  KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
extra_hosts:
  - "moby:127.0.0.1"

我使用下面的属性连接这个 kafka

props.put("bootstrap.servers", "lnc52c9:29092"); 

当我尝试在该服务器中生成消息时,我收到以下错误

警告 o.apache.kafka.clients.NetworkClient - 获取关联 ID 为 1 的元数据时出错:{foo=LEADER_NOT_AVAILABLE}

主机可以从我的机器上 ping 通,因为它都在同一个网络中,没有防火墙问题。当我在 docker 容器中使用命令 hostname 时,我可以看到相同的主机名。我错过了什么吗?

【问题讨论】:

  • 你能发布你完整的docker-compose.yml吗?另外,您从哪里连接到 kafka?
  • 我已经更新了完整的 docker-compose.yml,并且我正在为这个 docker 容器 (github.com/confluentinc/cp-docker-images/blob/4.0.x/examples/…) 使用虚拟机。我正在尝试从另一台 Windows 机器连接这个 kafka,其中 docker 容器的主机是 pinggable ,两者都在同一个网络中。
  • 你的虚拟机的操作系统是什么?
  • 尝试在你的kafka服务中添加这个:KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:29092如果你使用windows作为VM主机
  • 虚拟机是redhat linux

标签: docker apache-kafka


【解决方案1】:

我认为你需要expose port容器中的kafka。您可以在 docker-compose 文件中执行此操作,方法是添加以下内容:

ports: "29092:29092"

这应该在 kafka 服务定义中。

【讨论】:

  • 谢谢,但我仍然收到 Leader Not Available 错误消息
  • @adorearun 你能检查端口是否打开并且可以连接到它吗?您可以使用简单的客户端,例如 telnet:telnet lnc52c9 29092 从 docker 容器和您真正想要连接的其他 Windows 机器执行此操作。
  • ports在使用 network_mode: host 时没有必要 - 您可以尝试将其删除并替换为 port 但它不应该有太大变化我还怀疑一些防火墙/网络问题 - 也运行从你的虚拟机 telnet 命令。如果它可以在 VM 上运行,但不能在其他机器上运行,并且可以 ping 通,请检查您的防火墙策略
猜你喜欢
  • 2020-09-12
  • 2022-11-18
  • 2020-01-14
  • 2021-09-21
  • 1970-01-01
  • 2021-02-15
  • 2020-07-31
  • 2022-12-11
  • 2022-01-25
相关资源
最近更新 更多