【问题标题】:Cannot connect to single-node Kafka server through Docker无法通过 Docker 连接到单节点 Kafka 服务器
【发布时间】:2018-11-28 03:11:16
【问题描述】:

我正在尝试通过 Docker 连接到单节点 Kafka 服务器,但出现以下错误:

%3|1529395526.480|FAIL|rdkafka#producer-1| [thrd:localhost:9092/bootstrap]: localhost:9092/bootstrap: Connect to ipv4#127.0.0.1:9092 failed: Connection refused
%3|1529395526.480|ERROR|rdkafka#producer-1| [thrd:localhost:9092/bootstrap]: localhost:9092/bootstrap: Connect to ipv4#127.0.0.1:9092 failed: Connection refused
%3|1529395526.480|ERROR|rdkafka#producer-1| [thrd:localhost:9092/bootstrap]: 1/1 brokers are down

docker-compose.yml文件内容如下:

version: '2'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    network_mode: host
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      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:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_ADVERTISED_HOSTNAME: kafka
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    extra_hosts:
      - "moby:127.0.0.1"

  schema_registry:
    image: confluentinc/cp-schema-registry
    hostname: schema_registry
    depends_on:
      - zookeeper
      - kafka
    ports:
      - "8081:8081"
    environment:
      SCHEMA_REGISTRY_HOST_NAME: schema_registry
      SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: '127.0.0.1:2181'

Dockerfile 内容如下:

FROM python:2

WORKDIR /kafkaproducerapp

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./BackOffice_Producer.py" ]

我做错了什么?

【问题讨论】:

  • 您是否尝试将端口 9092 添加到您的 kafka?
  • 您没有将容器的端口映射到您的主机,就像您为架构注册表所做的那样,您也可以将主机添加到容器的主机文件中,以便代替localhostthis example for a java app
  • 添加了端口,但我仍然遇到同样的错误。
  • 你从哪里得到这个撰写文件?您不应该使用 localhost 或 127.0.0.1 将一个容器连接到其他容器......基本上,Kafka 和 Registry 都可以访问 Zookeeper

标签: python docker apache-kafka apache-zookeeper confluent-schema-registry


【解决方案1】:

你需要这个:

KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092

否则 Kafka 代理会告诉任何连接的人,它可以在 localhost:9092 上找到,这在其他容器中不起作用。在您的其他容器中,使用 kafka:29092 作为代理主机和端口,并使用 zookeeper:2181 作为 zookeeper。

您可以从本地主机访问 9092 上的代理(假设您公开了端口)。

查看this docker-compose 获取完整示例(来自this repo

【讨论】:

  • 对于任何感兴趣的人,docker-compose url 更改为 https://raw.githubusercontent.com/confluentinc/cp-all-in-one/master/cp-all-in-one/docker-compose.yml
  • @MOHRE 谢谢,我已经更新了答案
猜你喜欢
  • 2021-11-25
  • 2018-04-28
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
  • 2021-01-03
  • 2014-03-11
  • 2020-11-14
  • 2017-10-07
相关资源
最近更新 更多