services:
  kafka:
    image: bitnamilegacy/kafka:latest
    container_name: kafka
    restart: always
    environment:
      # KRaft 模式
      - KAFKA_CFG_PROCESS_ROLES=controller,broker
      - KAFKA_CFG_NODE_ID=1
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093
      - KAFKA_CFG_LISTENERS=INTERNAL://:9094,EXTERNAL://:9092,CONTROLLER://:9093
      - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka:9094,EXTERNAL://localhost:9092
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_LOG_DIRS=/bitnami/kafka/data
      # 内存调优（减少磁盘写）
      - KAFKA_CFG_LOG_FLUSH_INTERVAL_MESSAGES=1000000
      - KAFKA_CFG_LOG_FLUSH_INTERVAL_MS=60000
      - KAFKA_CFG_NUM_PARTITIONS=1
      - KAFKA_HEAP_OPTS=-Xmx1G -Xms1G
    ports:
      - "9092:9092"    # Kafka client port
    volumes:
      - kafka-data:/bitnami/kafka
    healthcheck:
      test: ["CMD", "bash", "-c", "echo > /dev/tcp/127.0.0.1/9092"]
      interval: 10s
      timeout: 5s
      retries: 10
      start_period: 30s

  akhq:
    image: tchiotludo/akhq
    container_name: kafka-akhq
    restart: always
    ports:
      - "12080:8080"
    command:
    environment:
      MICRONAUT_SERVER_CONTEXT_PATH: /kafkaprodhk
      KAFKA_BROKERS: kafka:9094
      KAFKA_VERSION: 4.0.0
      AKHQ_CONFIGURATION: |
        akhq:
          connections:
            my-cluster:
              properties:
                bootstrap.servers: "kafka:9094"
    healthcheck:
      #test: ["CMD-SHELL", "curl --fail http://localhost:8080/kafkaprod/api/cluster || exit 1"]
      test: ["CMD-SHELL", "curl --fail http://localhost:8080/kafkaprodhk/api/cluster || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 5
    depends_on:
      kafka:
        condition: service_healthy

  kafka-exporter:
    image: danielqsj/kafka-exporter:latest
    container_name: kafka-exporter
    restart: always
    environment:
      - KAFKA_BROKERS=kafka:9094
      - KAFKA_VERSION=4.0.0
    command:
      - '--kafka.server=kafka:9094'
      - '--kafka.version=4.0.0'
    ports:
      - "9308:9308" 
    depends_on:
      kafka:
        condition: service_healthy

volumes:
  kafka-data:

