使用Bitnami镜像在Docker中搭建Kafka集群出现节点连接错误如何解决
问题根因
你当前的配置错误出在Kafka监听器的地址绑定规则:
KAFKA_LISTENERS配置为127.0.0.1:xxxx时,Kafka只会监听容器内部的环回地址,同一Docker网络下的其他容器(包括另一个Kafka broker)无法通过该地址访问到当前服务KAFKA_ADVERTISED_LISTENERS配置为127.0.0.1:xxxx时,两个broker从ZooKeeper获取到对方的访问地址都是环回地址,发起请求时会访问自身容器的本地端口,自然无法建立跨broker的通信
修正后的配置
你需要配置双监听器,分别处理Docker内部跨容器通信和宿主机本地访问两个场景,完整的docker-compose.yml如下:
version: "3" services: zookeeper: image: 'bitnami/zookeeper:latest' ports: - '2181:2181' environment: - ALLOW_ANONYMOUS_LOGIN=yes kafka1: image: 'bitnami/kafka:latest' container_name: 'kafka1' ports: - '9092:9092' environment: - KAFKA_CFG_BROKER_ID=0 - KAFKA_CFG_LISTENERS=INTERNAL://0.0.0.0:19092,EXTERNAL://0.0.0.0:9092 - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka1:19092,EXTERNAL://127.0.0.1:9092 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 - ALLOW_PLAINTEXT_LISTENER=yes depends_on: - zookeeper kafka2: image: 'bitnami/kafka:latest' container_name: 'kafka2' ports: - '9093:9093' environment: - KAFKA_CFG_BROKER_ID=1 - KAFKA_CFG_LISTENERS=INTERNAL://0.0.0.0:19093,EXTERNAL://0.0.0.0:9093 - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka2:19093,EXTERNAL://127.0.0.1:9093 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 - ALLOW_PLAINTEXT_LISTENER=yes depends_on: - zookeeper
配置说明
- INTERNAL监听器:用于Docker网络内部的broker跨节点通信,绑定
0.0.0.0允许所有容器访问,对外广播的地址是容器服务名+内部端口 - EXTERNAL监听器:用于宿主机本地访问,对外广播的地址是
127.0.0.1+映射到宿主机的端口,你本地的客户端仍然可以通过localhost:9092、localhost:9093访问两个broker
配置修改完成后,执行以下命令重启服务即可:
# 删除旧容器和挂载卷,避免残留配置影响 docker compose down -v # 重新启动服务 docker compose up -d
内容的提问来源于stack exchange,提问作者vindor
相关产品推荐
相关产品推荐

