services: # Redpanda - Kafka-compatible event streaming platform redpanda: image: docker.redpanda.com/redpandadata/redpanda:v25.3.6 container_name: redpanda command: - redpanda - start - --smp - '1' - --reserve-memory - 0M - --overprovisioned - --node-id - '0' - --kafka-addr - PLAINTEXT://0.0.0.0:9092,OUTSIDE://0.0.0.0:19092 - --advertise-kafka-addr - PLAINTEXT://redpanda:9092,OUTSIDE://localhost:19092 - --rpc-addr - 0.0.0.0:33145 - --advertise-rpc-addr - redpanda:33145 - --schema-registry-addr - internal://0.0.0.0:8081,external://0.0.0.0:18081 - --pandaproxy-addr - internal://0.0.0.0:8082,external://0.0.0.0:18082 - --advertise-pandaproxy-addr - internal://redpanda:8082,external://localhost:18082 ports: - "19092:19092" # Kafka API (external) - "18081:18081" # Schema Registry (external) - "18082:18082" # HTTP Proxy (external) - "19644:9644" # Admin API volumes: - redpanda-data:/var/lib/redpanda/data healthcheck: test: ["CMD", "rpk", "cluster", "health"] interval: 10s timeout: 5s retries: 5 start_period: 30s # Redpanda Console - Web UI for managing Redpanda console: image: docker.redpanda.com/redpandadata/console:v3.5.0 container_name: redpanda-console environment: - KAFKA_BROKERS=redpanda:9092 - SCHEMA_REGISTRY_ENABLED=true - SCHEMA_REGISTRY_URLS=http://redpanda:8081 ports: - "8080:8080" depends_on: redpanda: condition: service_healthy # Topic Setup - Creates initial topics topic-setup: image: docker.redpanda.com/redpandadata/redpanda:v25.3.6 container_name: topic-setup entrypoint: ["/bin/bash", "/tmp/create-topics.sh"] volumes: - ./scripts/create-topics.sh:/tmp/create-topics.sh:ro depends_on: redpanda: condition: service_healthy restart: "no" # Redpanda Connect - Data Generator Pipeline # No container_name: these are the services meant to be scaled with # `docker compose up -d --scale =N` (see README), and a fixed # container_name prevents Compose from running more than one replica. connect-generator: image: docker.redpanda.com/redpandadata/connect:4.75.1 volumes: - ./pipelines/generator.yaml:/connect.yaml:ro depends_on: topic-setup: condition: service_completed_successfully restart: unless-stopped # Redpanda Connect - Data Processor Pipeline connect-processor: image: docker.redpanda.com/redpandadata/connect:4.75.1 volumes: - ./pipelines/processor.yaml:/connect.yaml:ro depends_on: topic-setup: condition: service_completed_successfully restart: unless-stopped # Redpanda Connect - Analytics Aggregator Pipeline connect-analytics: image: docker.redpanda.com/redpandadata/connect:4.75.1 volumes: - ./pipelines/analytics.yaml:/connect.yaml:ro depends_on: topic-setup: condition: service_completed_successfully restart: unless-stopped # Datadog Agent - scrapes Redpanda (via the official redpanda check) and # Redpanda Connect (via the generic OpenMetrics check) directly. Only # starts with `--profile datadog`. Built from datadog/Dockerfile (not the # stock image) because the official Redpanda check has to be baked into # the image - it can't be installed into a running container. datadog-agent: build: context: ./datadog container_name: datadog-agent profiles: - datadog environment: - DD_API_KEY=${DD_API_KEY:-} - DD_SITE=${DD_SITE:-datadoghq.com} - DD_HOSTNAME=rpcn-analytics-demo - DD_APM_ENABLED=false - DD_PROCESS_AGENT_ENABLED=false volumes: - ./datadog/conf.d:/etc/datadog-agent/conf.d:ro depends_on: redpanda: condition: service_healthy connect-generator: condition: service_started connect-processor: condition: service_started connect-analytics: condition: service_started volumes: redpanda-data: