services: kafka: image: apache/kafka:3.9.0 ports: - "9092:9092" environment: KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: broker,controller KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093 KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" KAFKA_NUM_PARTITIONS: 4 KAFKA_LOG_RETENTION_HOURS: 24 CLUSTER_ID: "EuNEx-kafka-cluster-001" volumes: - kafka_data:/tmp/kraft-combined-logs healthcheck: test: ["CMD-SHELL", "/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list || exit 1"] interval: 10s timeout: 5s retries: 5 kafka-init: image: apache/kafka:3.9.0 depends_on: kafka: condition: service_healthy entrypoint: ["/bin/bash", "-c"] command: - | /opt/kafka/bin/kafka-topics.sh --bootstrap-server kafka:9092 --create --if-not-exists \ --topic eunex.recovery.fragments --partitions 4 --replication-factor 1 /opt/kafka/bin/kafka-topics.sh --bootstrap-server kafka:9092 --create --if-not-exists \ --topic eunex.trades --partitions 4 --replication-factor 1 /opt/kafka/bin/kafka-topics.sh --bootstrap-server kafka:9092 --create --if-not-exists \ --topic eunex.market-data --partitions 4 --replication-factor 1 /opt/kafka/bin/kafka-topics.sh --bootstrap-server kafka:9092 --create --if-not-exists \ --topic eunex.orders --partitions 4 --replication-factor 1 /opt/kafka/bin/kafka-topics.sh --bootstrap-server kafka:9092 --create --if-not-exists \ --topic eunex.control --partitions 1 --replication-factor 1 echo "Topics created." eunex: build: context: .. dockerfile: docker/Dockerfile depends_on: kafka-init: condition: service_completed_successfully environment: EUNEX_KAFKA_BROKERS: kafka:9092 EUNEX_DATA_DIR: /app/data ports: - "7860:7860" - "8090:8090" - "8091:8091" - "9001:9001" volumes: - eunex_data:/app/data volumes: kafka_data: eunex_data: