You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							325 lines
						
					
					
						
							8.7 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							325 lines
						
					
					
						
							8.7 KiB
						
					
					
				| x-seaweedfs-build: &seaweedfs-build | |
|   build: | |
|     context: ../.. | |
|     dockerfile: test/kafka/Dockerfile.seaweedfs | |
|   image: kafka-seaweedfs-dev | |
|  | |
| services: | |
|   # Zookeeper for Kafka | |
|   zookeeper: | |
|     image: confluentinc/cp-zookeeper:7.4.0 | |
|     container_name: kafka-zookeeper | |
|     ports: | |
|       - "2181:2181" | |
|     environment: | |
|       ZOOKEEPER_CLIENT_PORT: 2181 | |
|       ZOOKEEPER_TICK_TIME: 2000 | |
|     healthcheck: | |
|       test: ["CMD", "nc", "-z", "localhost", "2181"] | |
|       interval: 10s | |
|       timeout: 5s | |
|       retries: 3 | |
|       start_period: 10s | |
|     networks: | |
|       - kafka-test-net | |
|  | |
|   # Kafka Broker | |
|   kafka: | |
|     image: confluentinc/cp-kafka:7.4.0 | |
|     container_name: kafka-broker | |
|     ports: | |
|       - "9092:9092" | |
|       - "29092:29092" | |
|     depends_on: | |
|       zookeeper: | |
|         condition: service_healthy | |
|     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_AUTO_CREATE_TOPICS_ENABLE: "true" | |
|       KAFKA_NUM_PARTITIONS: 3 | |
|       KAFKA_DEFAULT_REPLICATION_FACTOR: 1 | |
|     healthcheck: | |
|       test: ["CMD", "kafka-broker-api-versions", "--bootstrap-server", "localhost:29092"] | |
|       interval: 10s | |
|       timeout: 5s | |
|       retries: 5 | |
|       start_period: 30s | |
|     networks: | |
|       - kafka-test-net | |
|  | |
|   # Schema Registry | |
|   schema-registry: | |
|     image: confluentinc/cp-schema-registry:7.4.0 | |
|     container_name: kafka-schema-registry | |
|     ports: | |
|       - "8081:8081" | |
|     depends_on: | |
|       kafka: | |
|         condition: service_healthy | |
|     environment: | |
|       SCHEMA_REGISTRY_HOST_NAME: schema-registry | |
|       SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: kafka:29092 | |
|       SCHEMA_REGISTRY_LISTENERS: http://0.0.0.0:8081 | |
|       SCHEMA_REGISTRY_KAFKASTORE_TOPIC: _schemas | |
|       SCHEMA_REGISTRY_DEBUG: "true" | |
|     healthcheck: | |
|       test: ["CMD", "curl", "-f", "http://localhost:8081/subjects"] | |
|       interval: 10s | |
|       timeout: 5s | |
|       retries: 5 | |
|       start_period: 20s | |
|     networks: | |
|       - kafka-test-net | |
|  | |
|   # SeaweedFS Master | |
|   seaweedfs-master: | |
|     <<: *seaweedfs-build | |
|     container_name: seaweedfs-master | |
|     ports: | |
|       - "9333:9333" | |
|       - "19333:19333"  # gRPC port | |
|     command:  | |
|       - master | |
|       - -ip=seaweedfs-master | |
|       - -port=9333 | |
|       - -port.grpc=19333 | |
|       - -volumeSizeLimitMB=1024 | |
|       - -defaultReplication=000 | |
|     volumes: | |
|       - seaweedfs-master-data:/data | |
|     healthcheck: | |
|       test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://seaweedfs-master:9333/cluster/status || curl -sf http://seaweedfs-master:9333/cluster/status"] | |
|       interval: 10s | |
|       timeout: 5s | |
|       retries: 10 | |
|       start_period: 20s | |
|     networks: | |
|       - kafka-test-net | |
|  | |
|   # SeaweedFS Volume Server | |
|   seaweedfs-volume: | |
|     <<: *seaweedfs-build | |
|     container_name: seaweedfs-volume | |
|     ports: | |
|       - "8080:8080" | |
|       - "18080:18080"  # gRPC port | |
|     command: | |
|       - volume | |
|       - -mserver=seaweedfs-master:9333 | |
|       - -ip=seaweedfs-volume | |
|       - -port=8080 | |
|       - -port.grpc=18080 | |
|       - -publicUrl=seaweedfs-volume:8080 | |
|       - -preStopSeconds=1 | |
|     depends_on: | |
|       seaweedfs-master: | |
|         condition: service_healthy | |
|     volumes: | |
|       - seaweedfs-volume-data:/data | |
|     healthcheck: | |
|       test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://seaweedfs-volume:8080/status"] | |
|       interval: 10s | |
|       timeout: 5s | |
|       retries: 3 | |
|       start_period: 10s | |
|     networks: | |
|       - kafka-test-net | |
|  | |
|   # SeaweedFS Filer | |
|   seaweedfs-filer: | |
|     <<: *seaweedfs-build | |
|     container_name: seaweedfs-filer | |
|     ports: | |
|       - "8888:8888" | |
|       - "18888:18888"  # gRPC port | |
|     command: | |
|       - filer | |
|       - -master=seaweedfs-master:9333 | |
|       - -ip=seaweedfs-filer | |
|       - -port=8888 | |
|       - -port.grpc=18888 | |
|     depends_on: | |
|       seaweedfs-master: | |
|         condition: service_healthy | |
|       seaweedfs-volume: | |
|         condition: service_healthy | |
|     volumes: | |
|       - seaweedfs-filer-data:/data | |
|     healthcheck: | |
|       test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://seaweedfs-filer:8888/"] | |
|       interval: 10s | |
|       timeout: 5s | |
|       retries: 3 | |
|       start_period: 15s | |
|     networks: | |
|       - kafka-test-net | |
|  | |
|   # SeaweedFS MQ Broker | |
|   seaweedfs-mq-broker: | |
|     <<: *seaweedfs-build | |
|     container_name: seaweedfs-mq-broker | |
|     ports: | |
|       - "17777:17777"  # MQ Broker port | |
|       - "18777:18777"  # pprof profiling port | |
|     command: | |
|       - mq.broker | |
|       - -master=seaweedfs-master:9333 | |
|       - -ip=seaweedfs-mq-broker | |
|       - -port=17777 | |
|       - -port.pprof=18777 | |
|     depends_on: | |
|       seaweedfs-filer: | |
|         condition: service_healthy | |
|     volumes: | |
|       - seaweedfs-mq-data:/data | |
|     healthcheck: | |
|       test: ["CMD", "nc", "-z", "localhost", "17777"] | |
|       interval: 10s | |
|       timeout: 5s | |
|       retries: 3 | |
|       start_period: 20s | |
|     networks: | |
|       - kafka-test-net | |
|  | |
|   # SeaweedFS MQ Agent | |
|   seaweedfs-mq-agent: | |
|     <<: *seaweedfs-build | |
|     container_name: seaweedfs-mq-agent | |
|     ports: | |
|       - "16777:16777"  # MQ Agent port | |
|     command: | |
|       - mq.agent | |
|       - -broker=seaweedfs-mq-broker:17777 | |
|       - -ip=0.0.0.0 | |
|       - -port=16777 | |
|     depends_on: | |
|       seaweedfs-mq-broker: | |
|         condition: service_healthy | |
|     volumes: | |
|       - seaweedfs-mq-data:/data | |
|     healthcheck: | |
|       test: ["CMD", "nc", "-z", "localhost", "16777"] | |
|       interval: 10s | |
|       timeout: 5s | |
|       retries: 3 | |
|       start_period: 25s | |
|     networks: | |
|       - kafka-test-net | |
|  | |
|   # Kafka Gateway (SeaweedFS with Kafka protocol) | |
|   kafka-gateway: | |
|     build: | |
|       context: ../..  # Build from project root | |
|       dockerfile: test/kafka/Dockerfile.kafka-gateway | |
|     container_name: kafka-gateway | |
|     ports: | |
|       - "9093:9093"  # Kafka protocol port | |
|       - "10093:10093"  # pprof profiling port | |
|     depends_on: | |
|       seaweedfs-mq-agent: | |
|         condition: service_healthy | |
|       schema-registry: | |
|         condition: service_healthy | |
|     environment: | |
|       - SEAWEEDFS_MASTERS=seaweedfs-master:9333 | |
|       - SEAWEEDFS_FILER_GROUP= | |
|       - SCHEMA_REGISTRY_URL=http://schema-registry:8081 | |
|       - KAFKA_PORT=9093 | |
|       - PPROF_PORT=10093 | |
|     volumes: | |
|       - kafka-gateway-data:/data | |
|     healthcheck: | |
|       test: ["CMD", "nc", "-z", "localhost", "9093"] | |
|       interval: 10s | |
|       timeout: 5s | |
|       retries: 5 | |
|       start_period: 30s | |
|     networks: | |
|       - kafka-test-net | |
|  | |
|   # Test Data Setup Service | |
|   test-setup: | |
|     build: | |
|       context: ../.. | |
|       dockerfile: test/kafka/Dockerfile.test-setup | |
|     container_name: kafka-test-setup | |
|     depends_on: | |
|       kafka: | |
|         condition: service_healthy | |
|       schema-registry: | |
|         condition: service_healthy | |
|       kafka-gateway: | |
|         condition: service_healthy | |
|     environment: | |
|       - KAFKA_BOOTSTRAP_SERVERS=kafka:29092 | |
|       - SCHEMA_REGISTRY_URL=http://schema-registry:8081 | |
|       - KAFKA_GATEWAY_URL=kafka-gateway:9093 | |
|     networks: | |
|       - kafka-test-net | |
|     restart: "no"  # Run once to set up test data | |
|     profiles: | |
|       - setup  # Only start when explicitly requested | |
|  | |
|   # Kafka Producer for Testing | |
|   kafka-producer: | |
|     image: confluentinc/cp-kafka:7.4.0 | |
|     container_name: kafka-producer | |
|     depends_on: | |
|       kafka: | |
|         condition: service_healthy | |
|       schema-registry: | |
|         condition: service_healthy | |
|     environment: | |
|       - KAFKA_BOOTSTRAP_SERVERS=kafka:29092 | |
|       - SCHEMA_REGISTRY_URL=http://schema-registry:8081 | |
|     networks: | |
|       - kafka-test-net | |
|     profiles: | |
|       - producer  # Only start when explicitly requested | |
|     command: > | |
|       sh -c " | |
|         echo 'Creating test topics...'; | |
|         kafka-topics --create --topic test-topic --bootstrap-server kafka:29092 --partitions 3 --replication-factor 1 --if-not-exists; | |
|         kafka-topics --create --topic avro-topic --bootstrap-server kafka:29092 --partitions 3 --replication-factor 1 --if-not-exists; | |
|         kafka-topics --create --topic schema-test --bootstrap-server kafka:29092 --partitions 1 --replication-factor 1 --if-not-exists; | |
|         echo 'Topics created successfully'; | |
|         kafka-topics --list --bootstrap-server kafka:29092; | |
|       "       | |
|  | |
|   # Kafka Consumer for Testing | |
|   kafka-consumer: | |
|     image: confluentinc/cp-kafka:7.4.0 | |
|     container_name: kafka-consumer | |
|     depends_on: | |
|       kafka: | |
|         condition: service_healthy | |
|     environment: | |
|       - KAFKA_BOOTSTRAP_SERVERS=kafka:29092 | |
|     networks: | |
|       - kafka-test-net | |
|     profiles: | |
|       - consumer  # Only start when explicitly requested | |
|     command: > | |
|       kafka-console-consumer | |
|       --bootstrap-server kafka:29092 | |
|       --topic test-topic | |
|       --from-beginning | |
|       --max-messages 10       | |
|  | |
| volumes: | |
|   seaweedfs-master-data: | |
|   seaweedfs-volume-data: | |
|   seaweedfs-filer-data: | |
|   seaweedfs-mq-data: | |
|   kafka-gateway-data: | |
|  | |
| networks: | |
|   kafka-test-net: | |
|     driver: bridge | |
|     name: kafka-integration-test
 |