services: kafka: image: apache/kafka:3.7.0 environment: KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: broker,controller KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092 KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093 KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false" CLUSTER_ID: "MkU3OEVBNTcwNTJENDM2Qk" KAFKA_HEAP_OPTS: "-Xmx512m -Xms256m" KAFKA_LOG_RETENTION_HOURS: 1 KAFKA_LOG_SEGMENT_BYTES: 134217728 ports: - "9092:9092" healthcheck: test: ["CMD", "/opt/kafka/bin/kafka-topics.sh", "--bootstrap-server", "localhost:9092", "--list"] interval: 5s timeout: 10s retries: 10 start_period: 30s kafka-init: image: apache/kafka:3.7.0 depends_on: kafka: condition: service_healthy command: > /opt/kafka/bin/kafka-topics.sh --bootstrap-server kafka:9092 --create --if-not-exists --topic http.logs --partitions 4 --replication-factor 1 restart: "no" minio: image: minio/minio command: server /data --console-address ":9001" ports: - "9000:9000" - "9001:9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 5s timeout: 10s retries: 10 start_period: 15s volumes: - minio-data:/data minio-init: image: minio/mc depends_on: minio: condition: service_healthy entrypoint: > /bin/sh -c " mc alias set local http://minio:9000 minioadmin minioadmin && mc mb --ignore-existing local/logs && mc anonymous set public local/logs " restart: "no" producer: build: . command: producer depends_on: - kafka-init environment: KAFKA_BROKERS: kafka:9092 PRODUCER_RATE_LIMIT_RPS: 10000 MAX_EVENTS: 1000000 ports: - "2112" consumer: build: . command: consumer depends_on: - kafka-init - minio-init environment: KAFKA_BROKERS: kafka:9092 MINIO_ENDPOINT: minio:9000 MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin ports: - "2113" deploy: replicas: 4 prometheus: image: prom/prometheus ports: - "9090:9090" volumes: - ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - /var/run/docker.sock:/var/run/docker.sock:ro extra_hosts: - "host.docker.internal:host-gateway" grafana: image: grafana/grafana ports: - "3000:3000" environment: GF_SECURITY_ADMIN_PASSWORD: admin volumes: - ./grafana/provisioning:/etc/grafana/provisioning:ro - grafana-data:/var/lib/grafana volumes: minio-data: grafana-data: