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

跨主机连接Kafka出现NoBrokersAvailable错误求助

跨主机连接Kafka报错NoBrokersAvailable的排查与解决

核心配置错误

你的Kafka容器配置中,KAFKA_ADVERTISED_LISTENERS的外部监听器地址配置错误:

KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://broker:29092,PLAINTEXT_EXTERNAL://222.222.222.22:9093

PLAINTEXT_EXTERNAL应该指向Kafka所在服务器111.111.111.11,而非客户端服务器222.222.222.22。Kafka会将这个地址返回给客户端,客户端需要通过该地址与Kafka建立通信,错误的IP配置会导致客户端无法找到可用的Broker节点。

修正步骤

1. 修改docker-compose.yml配置

更新监听器相关配置,确保外部地址指向Kafka所在服务器:

version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.3.2
    container_name: zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  broker:
    image: confluentinc/cp-kafka:7.3.2
    container_name: broker
    ports:
      - "9092:9092"
      - "9093:9093"
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT,PLAINTEXT_EXTERNAL:PLAINTEXT
      # 新增KAFKA_LISTENERS确保容器内监听所有网卡
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT_INTERNAL://0.0.0.0:29092,PLAINTEXT_EXTERNAL://0.0.0.0:9093
      # 修正外部监听器地址为Kafka服务器IP
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://broker:29092,PLAINTEXT_EXTERNAL://111.111.111.11:9093
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1

2. 重启Kafka容器

执行命令让新配置生效:

docker-compose down
docker-compose up -d

3. 验证网络连通性

在客户端服务器222.222.222.22上测试端口可达性:

# 使用telnet测试
telnet 111.111.111.11 9093
# 或使用nc测试
nc -zv 111.111.111.11 9093

如果连接失败,需检查:

  • Kafka所在服务器的防火墙是否开放9093端口
  • 云服务器安全组是否允许222.222.222.22访问9093端口
  • Docker端口映射状态:执行docker ps,确认broker容器的9093端口显示为0.0.0.0:9093->9093/tcp

4. 确认Python客户端配置

你的app.py中bootstrap_servers配置为111.111.111.11:9093是正确的,无需修改。若之前连接过错误地址,建议重启Python应用清除客户端缓存。

额外验证

  • 检查容器运行状态:docker-compose ps,确保zookeeper和broker均处于Up状态
  • 查看Kafka日志确认监听器生效:docker logs broker | grep "Listening for connections",应能看到Listening for connections on PLAINTEXT_EXTERNAL://0.0.0.0:9093的日志输出

内容的提问来源于stack exchange,提问作者Miguel Payá

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:19:57