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监听器绑定地址但未配置控制器的广告监听地址,导致集群内其他节点无法正确识别当前节点的控制器通信端口,引发连接不稳定。
解决方法
统一节点配置规则:
- 所有节点的
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,明确告知集群内其他控制器节点当前节点的控制器通信地址。
- 所有节点的
验证网络连通性:
- 确保三个节点的宿主机防火墙均开放
9092和9093端口,允许节点间互相访问。 - 使用
nc -zv <目标节点IP> 9093命令在每个节点上测试与其他节点的控制器端口连通性,排查网络阻塞问题。
- 确保三个节点的宿主机防火墙均开放
修正后的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
相关产品推荐
相关产品推荐

