You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET客户端连接Docker部署的Kafka指定9094却报9092无法解析

问题原因

你的问题本质是Kafka监听器配置和端口映射不匹配,导致客户端拿到了Docker内部网络的Broker地址,无法解析。

首先明确Kafka客户端和Broker的交互逻辑:

  1. 客户端首先连接你配置的bootstrap.servers地址(也就是你填的localhost:9094)
  2. 连接成功后,Broker会把自己advertised.listeners配置中对应监听器的地址返回给客户端,后续所有通信客户端都会使用这个返回的地址,而非初始填写的bootstrap地址。

你现有配置存在两个错误:

  • KAFKA_LISTENERS中OUTSIDE监听器绑定了容器本地回环地址localhost:9094,外部宿主机发来的请求无法被这个监听器接收,请求只能进入监听Docker内部网络的INTERNAL监听器(端口9092),Broker会把INTERNAL对应的通告地址kafka:9092返回给客户端,你的宿主机没有配置kafka域名到Docker容器IP的映射,自然无法解析。
  • 端口映射配置为9094:9092,把宿主机9094端口映射到了容器内部的9092端口(即INTERNAL监听器的端口),完全没有用到你配置的9094外部监听器端口。

修复方案

修改docker-compose.yml中kafka服务的配置,调整后的完整kafka配置如下:

kafka:
  image: confluentinc/cp-kafka:latest
  container_name: kafka
  depends_on:
    - zookeeper
  ports:
    - 9094:9094 # 宿主机9094映射容器外部监听器的9094端口
  environment:
    KAFKA_BROKER_ID: 1
    KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    # 监听器绑定0.0.0.0,允许所有网卡的请求进入
    KAFKA_LISTENERS: INTERNAL://0.0.0.0:9092,OUTSIDE://0.0.0.0:9094
    # 通告地址保持不变,内部网络用kafka:9092,外部用localhost:9094
    KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://localhost:9094
    KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT
    KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
    KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
    KAFKA_DELETE_TOPIC_ENABLE: "true"
    KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
  extra_hosts:
    - "localhost: 127.0.0.1"
  networks:
    - app-network

修改后重启容器即可解决问题。


内容的提问来源于stack exchange,提问作者James Gatt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:45:01