首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker容器网络- Kafka生产者

Docker容器网络- Kafka生产者
EN

Stack Overflow用户
提问于 2019-05-07 21:21:26
回答 1查看 325关注 0票数 1

我想产生从容器A到容器B中的Kafka主题的消息,但我面临着一些与这些容器的网络有关的奇怪问题。你知道如何以正确的方式连接这些容器吗?问题是收集服务程序无法从另一个容器中看到kafka,也无法向其中添加消息。更具体地说,我有以下服务:

docker-compose.yml

代码语言:javascript
复制
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文件

代码语言:javascript
复制
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"
EN

回答 1

Stack Overflow用户

发布于 2019-05-07 21:33:53

您需要正确设置KAFKA_ADVERTISED_LISTENERS

目前,KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092意味着连接到代理的任何客户端都将获得localhost作为代理地址,后续请求将在该地址上连接。除非客户端在代理上运行(它不在这里),否则您需要更改此配置。对于在一个自包含的Docker环境中运行,这非常简单:

代码语言:javascript
复制
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/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56023624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档