A modular Spring Boot system demonstrating event-driven architecture using Apache Kafka, with services for order processing and inventory management.
This project showcases how to decouple services using Kafka while maintaining data consistency across modules.
Client → Producer API → Kafka Topic → Consumers
├── Order Service (DB)
└── Inventory Service (DB)
| Module | Responsibility |
|---|---|
| pssdata | Shared DTOs (Order, OrderItem) |
| producer | Publishes order events to Kafka |
| consumer | Persists orders into database |
| inventory | Updates stock based on orders |
- Java 17
- Spring Boot
- Spring Kafka
- Spring Data JPA
- MySQL
- Docker / Docker Compose
- Event-driven communication using Kafka
- Modular architecture (shared DTO layer)
- Asynchronous processing
- Inventory synchronization
- Transactional database operations
- Dockerized Kafka broker
-
Client sends order → Producer API
-
Producer publishes to
pss_order -
Consumers process event:
- Order Service → saves order
- Inventory Service → updates stock
docker-compose up -dRun each module:
cd producer && mvn spring-boot:run
cd consumer && mvn spring-boot:run
cd inventory && mvn spring-boot:runPOST /api/v1/kafka/publishExample payload:
{
"id": 1,
"customerName": "Nicko",
"items": [
{
"productId": 1,
"productName": "Keyboard",
"quantity": 2,
"price": 1500
}
]
}├── producer/
├── consumer/
├── inventory/
├── pssdata/
├── docker-compose.yml
├── .env.example
├── application-example.yml
- Add retry mechanism (Kafka DLQ)
- Introduce schema validation (Avro / Schema Registry)
- Add centralized logging (ELK stack)
- Add API gateway
- Convert to full microservices deployment