本地Ubuntu通过Docker Compose部署Kafka遇模式配置错误求助
问题描述
在本地Ubuntu系统通过Docker Compose运行Bitnami Kafka时触发错误,提示:
Kafka haven't been configured to work in either Raft or Zookeper mode. Please make sure at least one of the modes is configured
执行docker-compose up后的日志如下:
sudo docker-compose up Starting kafka-producer_kafka_1 ... done Attaching to kafka-producer_kafka_1 kafka_1 | kafka 16:06:40.38 INFO ==> kafka_1 | kafka 16:06:40.38 INFO ==> Welcome to the Bitnami kafka container kafka_1 | kafka 16:06:40.38 INFO ==> Subscribe to project updates by watching https://github.com/bitnami/containers kafka_1 | kafka 16:06:40.38 INFO ==> Submit issues and feature requests at https://github.com/bitnami/containers/issues kafka_1 | kafka 16:06:40.38 INFO ==> kafka_1 | kafka 16:06:40.39 INFO ==> ** Starting Kafka setup ** kafka_1 | kafka 16:06:40.46 ERROR ==> Kafka haven't been configured to work in either Raft or Zookeper mode. Please make sure at least one of the modes is configured. kafka_1 | kafka 16:06:40.49 WARN ==> Kafka has been configured with a PLAINTEXT listener, this setting is not recommended for production environments.
当前使用的docker-compose.yaml配置:
version: "3" services: kafka: image: docker.io/bitnami/kafka:latest ports: - "9092:9092" - "9094:9094" volumes: - "kafka_data:/bitnami" environment: - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://0.0.0.0:9094 - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://0.0.0.0:9094 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT volumes: kafka_data: driver: local
修复方案
Bitnami Kafka必须明确指定使用ZooKeeper模式(传统架构)或KRaft模式(无ZooKeeper架构),二选一即可,以下是两种配置方式:
方式一:使用ZooKeeper模式
添加ZooKeeper服务并配置Kafka连接到该服务:
version: "3" services: zookeeper: image: docker.io/bitnami/zookeeper:latest ports: - "2181:2181" volumes: - "zookeeper_data:/bitnami" environment: - ALLOW_ANONYMOUS_LOGIN=yes kafka: image: docker.io/bitnami/kafka:latest ports: - "9092:9092" - "9094:9094" volumes: - "kafka_data:/bitnami" environment: - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,EXTERNAL://0.0.0.0:9094 - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://localhost:9094 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 depends_on: - zookeeper volumes: zookeeper_data: driver: local kafka_data: driver: local
- 新增Bitnami ZooKeeper服务,开启匿名登录(仅适合测试环境)
- 给Kafka添加
KAFKA_CFG_ZOOKEEPER_CONNECT配置,指向ZooKeeper服务地址 - 移除原配置中的
CONTROLLER监听,ZooKeeper模式下无需该配置
方式二:使用KRaft模式(无ZooKeeper)
配置Kafka以KRaft模式运行,需设置节点角色、集群ID等参数:
version: "3" services: kafka: image: docker.io/bitnami/kafka:latest ports: - "9092:9092" - "9094:9094" - "9093:9093" volumes: - "kafka_data:/bitnami" environment: - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://0.0.0.0:9094 - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://localhost:9094 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093 - KAFKA_CFG_PROCESS_ROLES=broker,controller - KAFKA_CFG_NODE_ID=1 - KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuvw
- 设置
PROCESS_ROLES为broker,controller,让当前节点同时承担 broker 和 controller 角色 - 配置
CONTROLLER_QUORUM_VOTERS指定集群投票节点 KAFKA_KRAFT_CLUSTER_ID可通过kafka-storage random-uuid命令生成,示例值仅供测试使用- 开放9093端口用于控制器节点间通信
内容的提问来源于stack exchange,提问作者mascai
相关产品推荐
相关产品推荐

