我提出了一个kafka消息服务,其中kafka代理安装在docker中,位于端口9092上。主机端口9092Map到容器端口9092。现在,我试图提出一个消费者听主机端口9092消费消息。我正在尝试设置消费者容器后,所有的经纪人都使用docker组成。我得到的错误,当我试图提出消费者是端口9092已经分配请有人帮助我认识到我的方法是否正确。如果正确的话,我能做些什么来解决这个问题
cnh2zyt31#
KAFKA_ADVERTISED_LISTENERS 需要指定为环境变量 localhost:<port> .默认情况下,kafka侦听器将在9092端口上侦听,当生产者/消费者连接到代理时,它将用 host:9092 .这里您正在docker中运行它,因此代理元数据列表中的主机将只能在docker网络中访问。为了让它工作,我们需要让kafka代理在另一个端口上侦听,并将其添加到 advertised.listeners 并为新端口添加端口Map。
KAFKA_ADVERTISED_LISTENERS
localhost:<port>
host:9092
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
1条答案
按热度按时间cnh2zyt31#
KAFKA_ADVERTISED_LISTENERS
需要指定为环境变量localhost:<port>
.默认情况下,kafka侦听器将在9092端口上侦听,当生产者/消费者连接到代理时,它将用
host:9092
.这里您正在docker中运行它,因此代理元数据列表中的主机将只能在docker网络中访问。
为了让它工作,我们需要让kafka代理在另一个端口上侦听,并将其添加到
advertised.listeners
并为新端口添加端口Map。