version: '3.8' services: zookeeper: image: confluentinc/cp-zookeeper:7.4.0 hostname: zookeeper container_name: zookeeper ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 kafka: image: confluentinc/cp-kafka:7.4.0 hostname: kafka container_name: kafka depends_on: - zookeeper ports: - "29092:29092" - "9092:9092" - "9101:9101" environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_JMX_PORT: 9101 KAFKA_JMX_HOSTNAME: localhost postgres: image: postgres:15-alpine hostname: postgres container_name: postgres ports: - "5432:5432" environment: POSTGRES_DB: benchmark_db POSTGRES_USER: benchmark_user POSTGRES_PASSWORD: benchmark_pass volumes: - postgres_data:/var/lib/postgresql/data - ./infrastructure/init.sql:/docker-entrypoint-initdb.d/init.sql spring-boot-consumer: build: context: ./spring-boot-consumer dockerfile: Dockerfile container_name: spring-boot-consumer depends_on: - kafka - postgres environment: SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:29092 SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/benchmark_db SPRING_DATASOURCE_USERNAME: benchmark_user SPRING_DATASOURCE_PASSWORD: benchmark_pass ports: - "8080:8080" dotnet-consumer: build: context: ./dotnet-consumer dockerfile: Dockerfile container_name: dotnet-consumer depends_on: - kafka - postgres environment: KAFKA_BOOTSTRAP_SERVERS: kafka:29092 CONNECTION_STRING: "Host=postgres;Database=benchmark_db;Username=benchmark_user;Password=benchmark_pass" ports: - "8081:8080" message-producer: build: context: ./infrastructure/producer dockerfile: Dockerfile container_name: message-producer depends_on: - kafka environment: KAFKA_BOOTSTRAP_SERVERS: kafka:29092 MESSAGES_PER_SECOND: 1000 TOPIC_NAME: benchmark-topic volumes: postgres_data: