Docker集群部署的Kafka无法与客户端容器建立连接问题咨询
问题原因
核心问题出在Kafka的广播地址配置错误:
- 你当前配置的
KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1是Kafka服务端主动向所有连接客户端推送的自身访问地址。 - 宿主机直接运行客户端时,访问
127.0.0.1:9092可以通过端口映射访问到Kafka容器,所以连接正常。 - 容器内的应用收到这个广播地址后,会访问应用容器自身的
127.0.0.1:9092,该地址下没有运行Kafka服务,因此抛出Broker不可用的报错。
修复方案
修改docker-compose.yml中Kafka和应用服务的配置:
- 替换Kafka服务的环境变量配置,添加多监听器支持,分别适配容器内部访问和宿主机外部访问:
kafka: image: wurstmeister/kafka ports: - "9092:9092" environment: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false' # 配置Kafka监听的所有网卡和端口 KAFKA_LISTENERS: INTERNAL://0.0.0.0:9093,EXTERNAL://0.0.0.0:9092 # 配置向不同客户端广播的访问地址 KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9093,EXTERNAL://127.0.0.1:9092 # 配置监听器对应的安全协议 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT # 指定Broker内部通信使用的监听器 KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL depends_on: - zookeeper
- 修改应用服务的Kafka连接地址,使用容器内网监听器访问Kafka:
app: image: someuser/someimage ports: - "8080:8080" environment: KAFKA_CONNECTION: kafka:9093 depends_on: - kafka
验证操作
修改完成后执行以下命令清除旧容器和残留配置,再重新启动服务即可生效:
docker-compose down -v docker-compose up -d
内容的提问来源于stack exchange,提问作者Somewhat_User
相关产品推荐
相关产品推荐

