services: kafka: image: apache/kafka:4.0.0 container_name: kafka-apache-kraft-410 hostname: kafka-kraft ports: - "9092:9092" # 映射 Broker 端口 environment: KAFKA_LOG4J_OPTS: "-Dlog4j.configurationFile=file:/opt/kafka/config/custom-log4j2.yaml" KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: "broker,controller" # 2. 监听器配置 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: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT" KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER" # 3. Controller 连接信息(单节点) KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka-kraft:9093" KAFKA_LOG_DIRS: "/var/lib/kafka/data" # 为内部 topic __consumer_offsets 设置副本因子为 1 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 # (可选,推荐) 事务状态 topic 的副本因子也设置为 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 volumes: - ./kafka-data:/var/lib/kafka/data # 数据持久化 - ./log4j2.yaml:/opt/kafka/config/custom-log4j2.yaml:ro # 日志级别配置 restart: always