backend redesign

This commit is contained in:
2026-03-11 18:47:11 -04:00
parent 8ff277c8c6
commit e99ef5d2dd
210 changed files with 12147 additions and 155 deletions

139
docker-compose.yaml Normal file
View File

@@ -0,0 +1,139 @@
version: '3.8'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.7.0
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ports:
- "2181:2181"
kafka:
image: confluentinc/cp-kafka:7.7.0
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
ports:
- "9092:9092"
postgres:
image: postgres:15
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: iceberg
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
# MinIO for S3-compatible storage (Iceberg warehouse)
minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: minio
MINIO_ROOT_PASSWORD: minio123
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio_data:/data
# Iceberg REST Catalog
iceberg-catalog:
image: tabulario/iceberg-rest:latest
environment:
- CATALOG_WAREHOUSE=s3://warehouse/
- CATALOG_IO__IMPL=org.apache.iceberg.aws.s3.S3FileIO
- CATALOG_S3_ENDPOINT=http://minio:9000
- CATALOG_S3_ACCESS__KEY__ID=minio
- CATALOG_S3_SECRET__ACCESS__KEY=minio123
- CATALOG_S3_PATH__STYLE__ACCESS=true
ports:
- "8181:8181"
depends_on:
- postgres
- minio
flink-jobmanager:
image: flink:1.20-scala_2.12
command: jobmanager
environment:
- JOB_MANAGER_RPC_ADDRESS=flink-jobmanager
ports:
- "6123:6123"
- "8081:8081"
depends_on:
- kafka
- postgres
flink-taskmanager:
image: flink:1.20-scala_2.12
command: taskmanager
environment:
- JOB_MANAGER_RPC_ADDRESS=flink-jobmanager
depends_on:
- flink-jobmanager
- kafka
relay:
build:
context: relay
dockerfile: relay/Dockerfile
ports:
- "5555:5555" # Ingestor work queue
- "5556:5556" # Ingestor responses
- "5558:5558" # Market data (clients)
- "5559:5559" # Client requests
environment:
- RUST_LOG=relay=info
- CONFIG_PATH=/config/config.yaml
volumes:
- ./relay/config.example.yaml:/config/config.yaml:ro
depends_on:
- flink-jobmanager
restart: unless-stopped
ingestor:
build:
context: ingestor
dockerfile: ingestor/Dockerfile
environment:
- LOG_LEVEL=info
- CONFIG_PATH=/config/config.yaml
volumes:
- ./ingestor/config.example.yaml:/config/config.yaml:ro
depends_on:
- kafka
- relay
restart: unless-stopped
history-test-client:
build:
context: test/history_client
dockerfile: test/history_client/Dockerfile
depends_on:
- relay
- ingestor
- flink-jobmanager
- iceberg-catalog
environment:
- ICEBERG_CATALOG_URI=http://iceberg-catalog:8181
- RELAY_ENDPOINT=tcp://relay:5555
- NOTIFICATION_ENDPOINT=tcp://flink:5557
volumes:
- ./client-py:/client-py:ro
profiles:
- test
# Wait for services to start up, then run new OHLCClient-based test
command: sh -c "sleep 10 && pip install -e /client-py && python client_ohlc_api.py"
volumes:
postgres_data:
minio_data: