配置为KRaft模式的Kafka为何仍要求ZooKeeper?
问题原因及解决方法
你的Kafka配置虽指定了KRaft模式,但仍触发ZooKeeper模式的原因主要有两点:
缺少KRaft模式的核心必填配置:Confluent cp-kafka镜像的启动脚本要求,启用KRaft模式必须同时指定
KAFKA_NODE_ID(节点唯一整数ID)和CLUSTER_ID(集群唯一标识)。仅设置KAFKA_KRAFT_MODE不足以让脚本识别为KRaft模式,会默认回退到ZooKeeper模式,因此报错要求KAFKA_ZOOKEEPER_CONNECT。KAFKA_KRAFT_MODE参数值错误:部分版本的Confluent镜像中,该参数的有效值为kraft而非true。设置true无法被启动脚本正确识别,导致模式判断失败。
修正后的docker-compose配置示例
kafka: image: confluentinc/cp-kafka:latest container_name: 'virl-kafka' restart: always ports: - "9092:9092" environment: KAFKA_KRAFT_MODE: "kraft" # 修正参数值为正确的kraft KAFKA_NODE_ID: "1" # 节点唯一ID,单节点可设为1 CLUSTER_ID: "your-cluster-id" # 执行kafka-storage.sh random-uuid生成唯一ID KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT KAFKA_LISTENERS: INTERNAL://0.0.0.0:9092 KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092 KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false" KAFKA_DELETE_TOPIC_ENABLE: "false"
生成CLUSTER_ID的方法
可以通过临时启动Kafka容器执行命令生成:
docker run --rm confluentinc/cp-kafka:latest kafka-storage.sh random-uuid
将生成的UUID替换配置中的your-cluster-id即可。
内容的提问来源于stack exchange,提问作者Alexander Mills
相关产品推荐
相关产品推荐

