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

Apache Kafka Kraft模式3节点Docker Compose部署报错求助

解决3节点Apache Kafka Kraft模式集群部署问题

问题1:CONTROLLER监听器绑定公网IP失败

错误信息

ERROR Unable to start acceptor for ListenerName(CONTROLLER) (kafka.network.DataPlaneAcceptor) org.apache.kafka.common.KafkaException: Socket server failed to bind to 13.201.80.230:9093: Address not available.

原因

Docker容器拥有独立网络栈,宿主机公网IP并非容器内部可用网络地址,直接绑定会导致端口监听失败。

解决方法

将CONTROLLER监听器的绑定地址改为容器内的0.0.0.0,让容器监听所有内部网卡端口,再通过Docker端口映射暴露给宿主机公网IP。


问题2:节点间反复断开连接

原因

仅修改CONTROLLER监听器绑定地址但未配置控制器的广告监听地址,导致集群内其他节点无法正确识别当前节点的控制器通信端口,引发连接不稳定。

解决方法

  1. 统一节点配置规则:

    • 所有节点的KAFKA_LISTENERS设置为PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093,确保容器能接收外部所有来源的连接请求。
    • 每个节点的KAFKA_ADVERTISED_LISTENERS设置为当前节点的公网IP(例如broker-1设为PLAINTEXT://13.201.80.230:9092),用于其他broker和客户端识别数据通信地址。
    • 新增关键配置:添加KAFKA_CONTROLLER_ADVERTISED_LISTENERS=CONTROLLER://<当前节点公网IP>:9093,明确告知集群内其他控制器节点当前节点的控制器通信地址。
  2. 验证网络连通性:

    • 确保三个节点的宿主机防火墙均开放9092和9093端口,允许节点间互相访问。
    • 使用nc -zv <目标节点IP> 9093命令在每个节点上测试与其他节点的控制器端口连通性,排查网络阻塞问题。
  3. 修正后的broker-1配置示例:

version: '3'

services:
  broker-1:
    image: apache/kafka:latest
    container_name: broker-1
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://13.201.80.230:9092
      KAFKA_CONTROLLER_ADVERTISED_LISTENERS: CONTROLLER://13.201.80.230:9093
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@13.201.80.230:9093,2@13.201.101.151:9093,3@13.235.76.195:9093
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
    ports:
      - "9092:9092"
      - "9093:9093"
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "/opt/kafka/bin/kafka-broker-api-versions.sh --bootstrap-server 13.201.80.230:9092 > /dev/null 2>&1",
        ]
      interval: 10s
      timeout: 10s
      retries: 5

注:broker-2和broker-3需对应修改KAFKA_NODE_ID、KAFKA_ADVERTISED_LISTENERS和KAFKA_CONTROLLER_ADVERTISED_LISTENERS中的IP地址,保持配置一致性。

内容的提问来源于stack exchange,提问作者Gampa Sivakumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:23:18