Ubuntu系统下Bitnami Kafka Docker容器无法启动求助
Bitnami Kafka容器无法启动,仅Zookeeper运行
我用以下docker-compose.yml启动Bitnami Zookeeper和Kafka容器:
version: "3.4" services: zookeeper: image: bitnami/zookeeper restart: always ports: - "2181:2181" volumes: - "zookeeper_data:/bitnami" environment: - ALLOW_ANONYMOUS_LOGIN=yes kafka: image: bitnami/kafka ports: - "9092:9092" volumes: - "kafka_data:/bitnami" environment: - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092 - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 depends_on: - zookeeper volumes: zookeeper_data: driver: local kafka_data: driver: local networks: default: external: name: techBankNet
执行docker-compose up -d无报错,但docker ps显示仅Zookeeper容器运行。查看Kafka容器日志:
kafka 14:50:00.34 kafka 14:50:00.34 Welcome to the Bitnami kafka container kafka 14:50:00.34 Subscribe to project updates by watching https://github.com/bitnami/containers kafka 14:50:00.34 Submit issues and feature requests at https://github.com/bitnami/containers/issues kafka 14:50:00.34 kafka 14:50:00.34 INFO ==> ** Starting Kafka setup ** kafka 14:50:00.37 WARN ==> KAFKA_CFG_LISTENERS must include a listener for CONTROLLER kafka 14:50:00.37 WARN ==> You set the environment variable ALLOW_PLAINTEXT_LISTENER=yes. For safety reasons, do not use this flag in a production environment. kafka 14:50:00.37 INFO ==> Initializing Kafka... kafka 14:50:00.38 INFO ==> No injected configuration files found, creating default config files kafka 14:50:00.42 INFO ==> Initializing KRaft... kafka 14:50:00.42 WARN ==> KAFKA_KRAFT_CLUSTER_ID not set - If using multiple nodes then you must use the same Cluster ID for each one kafka 14:50:01.29 INFO ==> Generated Kafka cluster ID 'W7_NXO5cQXWLs5xG4i7zYw' kafka 14:50:01.29 INFO ==> Formatting storage directories to add metadata...
已排查:
- 端口9092未被占用
techBankNet网络已存在(docker network list输出):
NETWORK ID NAME DRIVER SCOPE b65deecbaa75 bridge bridge local 5a95427177c5 host host local c4243c86eba1 kafka-stack-docker-compose_default bridge local 99063d81411a none null local 9a1c188071fb pss-backend-application_pss bridge local 5fe91218bb8e techBankNet bridge local
操作系统:KUbuntu 22.04
求分析Kafka无法启动的原因。
故障原因及修复方案
核心问题:Kafka模式冲突
从日志里的Initializing KRaft...可以看出,当前Bitnami Kafka镜像默认尝试用KRaft模式启动,但你配置了KAFKA_CFG_ZOOKEEPER_CONNECT指定ZooKeeper作为元数据存储,两种模式冲突导致启动失败。同时日志中的KAFKA_CFG_LISTENERS must include a listener for CONTROLLER警告,也是KRaft模式的强制要求,但你实际需要的是ZooKeeper模式。
修复步骤:
修改Kafka服务的环境变量,明确指定以Broker角色启动,禁用KRaft:
kafka: image: bitnami/kafka ports: - "9092:9092" volumes: - "kafka_data:/bitnami" environment: - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092 - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 - KAFKA_CFG_PROCESS_ROLES=broker # 仅作为broker运行,禁用KRaft控制器角色 - KAFKA_KRAFT_CLUSTER_ID= # 清空KRaft集群ID,强制使用ZooKeeper模式 depends_on: - zookeeper清理已有的Kafka数据卷(之前用KRaft初始化过存储目录,残留元数据会导致冲突):
docker-compose down -v重新启动容器:
docker-compose up -d
补充说明:
- 新版Bitnami Kafka镜像默认启用KRaft模式,若要使用传统ZooKeeper模式,必须显式指定
KAFKA_CFG_PROCESS_ROLES=broker并清空KAFKA_KRAFT_CLUSTER_ID。 - 若后续想切换到KRaft模式,需移除
KAFKA_CFG_ZOOKEEPER_CONNECT,设置有效的KAFKA_KRAFT_CLUSTER_ID,同时更新KAFKA_CFG_LISTENERS包含CONTROLLER监听器(例如PLAINTEXT://:9092,CONTROLLER://:9093)。
内容的提问来源于stack exchange,提问作者belmont
相关产品推荐
相关产品推荐

