From 8197ed2b5ab78dbc4c7e51f6368013d56d902a33 Mon Sep 17 00:00:00 2001 From: Abhinaysai Kamineni <66816045+askmy-stack@users.noreply.github.com> Date: Sun, 2 Aug 2026 22:06:24 -0400 Subject: [PATCH] Add graph-loader and vessel-loader services to docker-compose. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wire Kafka→Neo4j consumers alongside rag-indexer so conflict and AIS events load into the graph during local compose runs. Co-authored-by: Cursor --- README.md | 22 ++++++++++++++++++++++ docker-compose.yml | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/README.md b/README.md index 908aa8f..233cc4c 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,28 @@ Open **http://localhost:5173** | http://localhost:8002/docs | API | | http://localhost:7475 | Neo4j Browser | + +### Kafka → Neo4j loaders (optional) + +With the full compose stack, conflict and vessel consumers load Kafka topics into Neo4j: + +```bash +docker compose up -d kafka zookeeper neo4j graph-loader vessel-loader +``` + +| Service | Consumer | Writes | +|---------|----------|--------| +| `graph-loader` | `python -m src.consumers graph-loader` | `:Event` nodes from GDELT/conflict topics | +| `vessel-loader` | `python -m src.consumers vessel-loader` | `:Vessel` nodes (+ chokepoint links) from AIS topics | +| `rag-indexer` | `python -m src.consumers rag-indexer` | Qdrant embeddings from conflict events | + +Local one-shot (without compose services): + +```bash +make consume-graph # or: python -m src.consumers graph-loader +make consume-vessel # or: python -m src.consumers vessel-loader +``` + ### ERP tier-N demo (optional) ```bash diff --git a/docker-compose.yml b/docker-compose.yml index 238052f..1d6c54b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -127,6 +127,39 @@ services: timeout: 5s retries: 5 + + # Graph loader — Kafka conflict events → Neo4j :Event nodes + graph-loader: + build: . + command: python -m src.consumers graph-loader --max-messages 0 + environment: + - KAFKA_BOOTSTRAP_SERVERS=kafka:29092 + - NEO4J_URI=bolt://neo4j:7687 + - NEO4J_USER=neo4j + - NEO4J_PASSWORD=${NEO4J_PASSWORD:-meridian_password} + depends_on: + kafka: + condition: service_healthy + neo4j: + condition: service_healthy + restart: unless-stopped + + # Vessel loader — AISHub vessel events → Neo4j :Vessel nodes + vessel-loader: + build: . + command: python -m src.consumers vessel-loader --max-messages 0 + environment: + - KAFKA_BOOTSTRAP_SERVERS=kafka:29092 + - NEO4J_URI=bolt://neo4j:7687 + - NEO4J_USER=neo4j + - NEO4J_PASSWORD=${NEO4J_PASSWORD:-meridian_password} + depends_on: + kafka: + condition: service_healthy + neo4j: + condition: service_healthy + restart: unless-stopped + # RAG indexer — streams Kafka conflict events into Qdrant rag-indexer: build: .