tensense's picture
Upload folder using huggingface_hub
4e909c7 verified
# Kafka Migration Guide
This document describes the migration from **Redis** to **Kafka** as the message broker for the Laddr multi-agent system.
Kafka provides persistent messaging, horizontal scaling, and higher throughput for production workloads.
---
## Overview
Kafka offers durable, highly scalable messaging suitable for production.
This guide walks through **architecture changes**, **configuration updates**, **deployment**, **verification**, and **rollback** steps to migrate from Redis to Kafka.
---
## Architecture Changes
### Before (Redis)
- Message broker: Redis (pub/sub)
- Persistence: Ephemeral (lost on restart)
- Scaling: Limited by single instance
- Use case: Development and lightweight deployments
### After (Kafka)
- Message broker: Apache Kafka with Zookeeper
- Persistence: Durable with configurable retention
- Scaling: Horizontal with partitions and consumer groups
- Use case: Production deployments with high throughput
### Topic Structure
- `laddr.tasks.<agent_name>` – Task queue for each agent
- `laddr.responses` – Response messages
Consumer groups follow the pattern:
`laddr-<agent_name>-workers`
---
## Configuration Changes
### Environment Variables (`.env`)
```bash
# Message Broker Configuration (Kafka)
KAFKA_BOOTSTRAP=kafka:9092
QUEUE_BACKEND=kafka
# Previous Redis configuration (commented out)
# REDIS_URL=redis://redis:6379/0
# QUEUE_BACKEND=redis
```
> **Note:**
> Use `kafka:9092` for client connections; `kafka:29092` is for inter-broker communication only.
### Docker Compose Services
- **Zookeeper** – Port 2181
- **Kafka** – Ports 9092 (client), 9101 (metrics)
- **Kafka UI** – Port 8080 (`http://localhost:8080`)
---
## Deployment Instructions
### Prerequisites
Install the Kafka dependencies:
```bash
pip install aiokafka>=0.11.0
# OR
pip install laddr[kafka]
```
### Starting the System
```bash
cd /path/to/your/project
docker-compose down
docker-compose up -d
```
Monitor system status:
```bash
docker-compose ps
docker-compose logs -f kafka
```
---
## Verification Steps
### Check Kafka Topics
```bash
docker-compose exec kafka kafka-topics --list --bootstrap-server localhost:9092
```
Expected topics:
- `laddr.tasks.coordinator`
- `laddr.tasks.researcher`
- `laddr.tasks.analyzer`
- `laddr.tasks.writer`
- `laddr.tasks.validator`
- `laddr.responses`
### Monitor Worker Logs
```bash
docker-compose logs -f coordinator_worker researcher_worker analyzer_worker writer_worker validator_worker
```
### Test via API
```bash
curl -X POST http://localhost:8000/api/v1/run \
-H "Content-Type: application/json" \
-d '{
"workflow_name": "test_workflow",
"initial_task": {
"agent": "researcher",
"inputs": {"query": "test"}
}
}'
```
---
## Scaling
To scale workers horizontally:
```bash
docker-compose up -d --scale coordinator_worker=3 --scale researcher_worker=3 --scale analyzer_worker=2 --scale writer_worker=2 --scale validator_worker=2
```
Kafka automatically balances partitions across consumers, enabling seamless horizontal scaling.
---
## Rollback to Redis
```bash
REDIS_URL=redis://redis:6379/0
QUEUE_BACKEND=redis
# Comment out Kafka config
# KAFKA_BOOTSTRAP=kafka:9092
```
Update your `docker-compose.yml` to re-enable Redis, remove Kafka and Zookeeper, then restart:
```bash
docker-compose down && docker-compose up -d
```
---
## Summary
- Kafka improves **reliability**, **scaling**, and **persistence**.
- Docker Compose now includes **Kafka**, **Zookeeper**, and **Kafka UI**.
- Redis remains available for quick rollback.
After migration, access Kafka UI at:
`http://localhost:8080`
to monitor system health and performance.