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

仅使用Broker角色配置KRaft模式Kafka时遇错误求解决

修复KRaft模式单节点Kafka的Docker Compose配置

问题根源

你遇到的ConfigException是因为controller.quorum.voters的格式不符合KRaft规范:该配置必须遵循node_id@controller_host:controller_port的格式,而你仅填写"1",无法被解析。另外,仅设置process.roles=broker需要依赖独立的Controller集群,但单节点测试场景下,更高效的方式是让单个节点同时承担Broker和Controller角色。

修复后的完整配置

services:
  kafka:
    image: confluentinc/cp-kafka:7.4.0
    container_name: kafka
    environment:
      KAFKA_KRAFT_MODE: "true"
      # 单节点同时承担Broker和Controller角色,适配测试场景
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_NODE_ID: 1
      # 修正投票节点格式:node_id@容器名:controller专属端口
      KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka:9093"
      # 新增Controller监听端口,与Broker端口区分
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      # 定义监听器与安全协议的映射关系
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
      # 指定Controller使用的监听器名称
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      # 测试场景可自定义集群ID,生产环境建议用`kafka-storage.sh random-uuid`生成有效ID
      CLUSTER_ID: my-cluster-id
    ports:
      - 9092:9092

  schema-registry:
    image: confluentinc/cp-schema-registry:7.4.0
    container_name: schema-registry
    environment:
      SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: PLAINTEXT://kafka:9092
      SCHEMA_REGISTRY_HOST_NAME: schema-registry
    ports:
      - 8081:8081
    depends_on:
      - kafka

  postgres:
    image: postgres:15
    container_name: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: hotel_db
    ports:
      - 5432:5432

关键修改说明

  • KAFKA_PROCESS_ROLES:改为broker,controller,让单节点同时处理两种角色,无需额外启动独立Controller容器,适配测试需求。
  • KAFKA_CONTROLLER_QUORUM_VOTERS:修正为1@kafka:9093,符合KRaft投票节点的解析格式,其中kafka是容器名称,9093为新增的Controller专属通信端口。
  • 监听器配置:新增CONTROLLER类型监听器,与Broker的PLAINTEXT监听器做端口隔离;通过KAFKA_LISTENER_SECURITY_PROTOCOL_MAP和KAFKA_CONTROLLER_LISTENER_NAMES明确Controller的通信规则。
  • depends_on:为Schema Registry添加Kafka依赖,确保Kafka启动完成后再启动Schema Registry,避免连接失败。

验证启动有效性

启动后可进入Kafka容器执行以下命令验证:

docker exec -it kafka kafka-topics.sh --create --topic test-avro-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

若能成功创建主题,说明Kafka配置正常。之后即可使用Avro生产者/消费者连接localhost:9092,Schema Registry连接localhost:8081完成测试。

内容的提问来源于stack exchange,提问作者David Franco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:52:30