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

Docker部署双节点Kafka集群:Listeners配置问题排查

双节点KRaft混合模式Kafka集群配置修正

核心错误点

  • 监听地址错误:使用127.0.0.1会导致容器仅能访问自身回环接口,跨节点(kafka-0和kafka-1)无法互相通信。容器间通信需使用容器服务名或0.0.0.0监听所有网络接口。
  • Listeners冗余配置:每个节点只需监听自身的Broker和Controller端口,无需包含其他节点的监听项。
  • Advertised Listeners配置错误:跨节点通信时,需告知集群其他节点当前节点的可访问地址(容器服务名+端口),而非127.0.0.1。
  • Inter-broker Listener不统一:集群内节点间通信应使用统一的Listener名称,而非每个节点自定义不同名称。

修正后的compose.yml配置

version: "2"

services:
  kafka-0:
    image: docker.io/bitnami/kafka:3.6
    container_name: kafka0
    ports:
      - "9092:9092"
      - "9082:9082"
    networks:
      - kafka-net
    environment:
      # KRaft settings
      - KAFKA_CFG_NODE_ID=0
      - KAFKA_CFG_PROCESS_ROLES=controller,broker
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-0:9082,1@kafka-1:9083
      - KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv
      # Listeners
      - KAFKA_CFG_LISTENERS=INTERNAL://0.0.0.0:9092,CONTROLLER://0.0.0.0:9082,EXTERNAL://0.0.0.0:9094
      - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka-0:9092,EXTERNAL://localhost:9092
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
      # Clustering
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=2
      - KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=2
      - KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=1
    volumes:
      - ./kafka_0_data:/bitnami/kafka
  kafka-1:
    image: docker.io/bitnami/kafka:3.6
    container_name: kafka1
    ports:
      - "9093:9093"
      - "9083:9083"
    networks:
      - kafka-net
    environment:
      # KRaft settings
      - KAFKA_CFG_NODE_ID=1
      - KAFKA_CFG_PROCESS_ROLES=controller,broker
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-0:9082,1@kafka-1:9083
      - KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv
      # Listeners
      - KAFKA_CFG_LISTENERS=INTERNAL://0.0.0.0:9093,CONTROLLER://0.0.0.0:9083,EXTERNAL://0.0.0.0:9095
      - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka-1:9093,EXTERNAL://localhost:9093
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
      # Clustering
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=2
      - KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=2
      - KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=1
    volumes:
      - ./kafka_1_data:/bitnami/kafka

networks:
  kafka-net:
    name: kafka-net
    external: true

关键配置说明

  • LISTENERS:每个节点监听自身的INTERNAL(容器间通信)、CONTROLLER(控制器通信)、EXTERNAL(主机外部访问)端口,用0.0.0.0确保容器内所有接口都能接收请求。
  • ADVERTISED_LISTENERS:INTERNAL使用容器服务名(kafka-0/kafka-1),让集群内节点能通过Docker网络互相访问;EXTERNAL使用localhost+映射端口,方便主机本地客户端连接。
  • CONTROLLER_LISTENER_NAMES:统一使用CONTROLLER作为控制器监听名称,配合CONTROLLER_QUORUM_VOTERS中的服务名+端口,确保控制器节点间能正常通信。
  • INTER_BROKER_LISTENER_NAME:统一使用INTERNAL作为节点间通信的监听名称,保证集群内Broker间通信路径一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:35:10