通过多个Docker容器收听同一端口

问题描述 投票:1回答:1

我已经提出了一个Kafka消息服务,其中Kafka代理在docker中设置并且在端口9092上。主机端口9092映射到容器端口9092.现在我试图启动一个监听主机端口9092消费的消费者消息。我试图在所有经纪人使用docker compose之后设置消费者容器。

错误我得到的,当我尝试提出消费者时,端口9092已经分配

请有人帮助我了解我的方法是否正确。如果它正确我该怎么做才能解决这个问题

docker apache-kafka docker-compose kafka-consumer-api docker-networking
1个回答
4
投票

需要使用KAFKA_ADVERTISED_LISTENERSlocalhost:<port>指定为环境变量。

默认情况下,Kafka监听器将侦听9092端口,当生产者/消费者连接到代理时,它将使用host:9092将代理列表作为元数据请求的一部分进行通告。

在这里,您在Docker中运行它,因此代理元数据列表中的主机只能在Docker网络中访问。

为了使它工作,我们需要让Kafka代理监听另一个端口,将其添加到advertised.listeners并为新端口添加端口映射。

ports:
- "29092:29092"
environment: 
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_LISTENERS=INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:29092
- KAFKA_ADVERTISED_LISTENERS=EXTERNAL://localhost:29092,INTERNAL://kafka0:9092
- KAFKA_INTER_BROKER_LISTENER_NAME=INTERNAL
- KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT```
© www.soinside.com 2019 - 2024. All rights reserved.