我知道这个主题有几个问题和博客文章。我以下两个: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
?我甚至需要外部侦听器吗?谢谢
1条答案
按热度按时间ht4b089n1#
无论如何,为了确保本地和容器网络内部我都可以引导到Kafka1:29092?
不,不,不
您的主机不知道Docker使用的DNS /服务名称。
而是在代码中添加一个环境变量(如
KAFKA_BOOTSTRAP_SERVERS
),然后通过运行配置将其设置为IDE中的变量(如**localhost:9092
**),或者设置为容器变量(kafka1:29092
)您还可以从合成文件中删除
- "29092:29092"
,因为您的主机永远不需要该端口来连接代理