【问题标题】:Docker container networking - Kafka ProducerDocker 容器网络 - Kafka Producer
【发布时间】:2019-05-07 13:21:26
【问题描述】:

我想从容器 A 向容器 B 中的 Kafka 主题生成消息,但我在这些容器的网络方面遇到了一些奇怪的问题。 您对我如何以正确的方式连接这些容器有任何想法吗? 问题是收集器服务无法从其他容器中看到 kafka,也无法向其添加消息。 更具体地说,我有以下服务:

docker-compose.yml

version: '3.5'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
      ADVERTISED_HOST: zookeeper
      ADVERTISED_PORT: 2181
    extra_hosts:
      - "moby:127.0.0.1"
    networks:
      - meetup-net

  kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    extra_hosts:
      - "moby:127.0.0.1"
    networks:
      - meetup-net

collector:
    image: collector:v1
    environment:
      - kafka-bootstrap-servers=docker_kafka_1.docker_meetup-net
    restart: always
    depends_on:
      - kafka
    networks:
      - meetup-net
networks:
  meetup-net:
    driver: bridge

另一方面,我有 application.conf 文件

streaming {
  window-size = 50
  window-interval = 5

  kafka-bootstrap-servers = ${?kafka-bootstrap-servers}
  kafka-bootstrap-servers = "localhost:9092"

  sink-topic = ${?source-topic}
  sink-topic = "meetup"

  key-value-json-path = ${key-value-json-path}
  key-value-json-path = "./data/keyvalue"

  source-topic-checkpoint-location = ${source-topic-checkpoint-location}
  source-topic-checkpoint-location = "./target/source-topic"

  sink-topic-checkpoint-location = ${sink-topic-checkpoint-location}
  sink-topic-checkpoint-location = "./target/sink-topic"
}

zookeeper.server = ${?zookeeper-server}
zookeeper.server = "localhost:2181"

【问题讨论】:

    标签: docker networking apache-kafka docker-compose dockerfile


    【解决方案1】:

    您需要正确设置KAFKA_ADVERTISED_LISTENERS

    目前KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 表示任何连接到代理的客户端都将获得localhost 作为连接后续请求的代理地址。 除非客户端在代理上运行(它不在这里),否则您需要更改此配置。对于在独立的 Docker 环境中运行,这很容易:

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

    现在任何客户端连接都应该是kafka:29092。这也意味着您可以将客户端在您的 Docker 主机上运行连接到 Kafka 代理,这可能很有用,例如在笔记本电脑上运行并在本地运行客户端时。

    Here 是一个示例 Docker Compose,展示了这一点。

    更多细节和背景,见https://rmoff.net/2018/08/02/kafka-listeners-explained/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2016-02-27
      相关资源
      最近更新 更多