services: postgres: image: postgres:18 container_name: todo-postgres environment: POSTGRES_USER: todo POSTGRES_PASSWORD: todo POSTGRES_DB: todo ports: - "5432:5432" volumes: - ./data/pgsql:/var/lib/postgresql redis: image: redis:8.4 container_name: todo-redis ports: - "6379:6379" volumes: - ./data/redis:/data kafka: image: apache/kafka:4.1.1 container_name: kafka ports: - "29092:29092" environment: # KRaft: broker + controller KAFKA_NODE_ID: "1" KAFKA_PROCESS_ROLES: "broker,controller" KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka:9093" # listeners KAFKA_LISTENERS: "PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:29092,CONTROLLER://0.0.0.0:9093" # 容器内访问使用 kafka:9092,本机访问使用 localhost:29092 KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092" KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT,CONTROLLER:PLAINTEXT" KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER" KAFKA_INTER_BROKER_LISTENER_NAME: "PLAINTEXT" # 单节点开发用 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1" KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: "1" KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: "1" KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: "0" volumes: - ./data/kafka:/var/lib/kafka/data kafka-ui: image: provectuslabs/kafka-ui:latest container_name: todo-kafka-ui ports: - "8081:8080" environment: KAFKA_CLUSTERS_0_NAME: local KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092 depends_on: - kafka