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
相关产品推荐
相关产品推荐

