apache-kafka Kafka容器使用相同的主机名从容器内部和外部进行连接

ws51t4hk  于 2022-11-01  发布在  Apache
关注(0)|答案(1)|浏览(129)

我知道这个主题有几个问题和博客文章。我以下两个:https://rmoff.net/2018/08/02/kafka-listeners-explained/
https://www.confluent.io/blog/kafka-client-cannot-connect-to-broker-on-aws-on-docker-etc/但不幸的是,没有成功。我试图使相同的代码将工作,无论我是从我的IDE运行它,其中kafka客户端是在一个容器中,或无论我正在运行的代码是在网络内的一个容器中。我能够使每一个场景单独工作,但不能同时工作。我的docker compose:

zoo1:
    image: confluentinc/cp-zookeeper:7.2.1
    hostname: zoo1
    container_name: zoo1
    ports:
     - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_SERVERS: zoo1:2888:3888

  kafka1:
    image: confluentinc/cp-kafka:7.2.1
    hostname: kafka1
    container_name: kafka1
    ports:
      - "9092:9092"
      - "29092:29092"
    environment:
      KAFKA_LISTENERS: INTERNAL://0.0.0.0:29092,EXTERNAL://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka1:29092,EXTERNAL://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181"
    depends_on:
      - zoo1

在这个docker-compose中,使用kafka1:29092作为引导程序的docker网络内的通信工作得很好。但是,从我的笔记本电脑使用同样的方法不工作。是否有任何方法来确保本地和容器网络内我都可以引导到kafka1:29092?我甚至需要外部侦听器吗?谢谢

ht4b089n

ht4b089n1#

无论如何,为了确保本地和容器网络内部我都可以引导到Kafka1:29092?
不,不,不
您的主机不知道Docker使用的DNS /服务名称。
而是在代码中添加一个环境变量(如KAFKA_BOOTSTRAP_SERVERS),然后通过运行配置将其设置为IDE中的变量(如**localhost:9092**),或者设置为容器变量(kafka1:29092
您还可以从合成文件中删除- "29092:29092",因为您的主机永远不需要该端口来连接代理

相关问题