You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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模式。

修复步骤:

  1. 修改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
    
  2. 清理已有的Kafka数据卷(之前用KRaft初始化过存储目录,残留元数据会导致冲突):

    docker-compose down -v
    
  3. 重新启动容器:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 02:12:01