Apache Kafka serves as the message broker and event streaming platform for the application.
It enables asynchronous communication between services and provides event persistence and replay capabilities.
9092
task.created
— task creation eventstask.updated
— task update eventstask.deleted
— task deletion eventstask.completed
— task completion eventsteam.created
— team creation eventsteam.updated
— team update eventsteam.deleted
— team deletion eventsteam.member_added
— team member addition eventsteam.member_removed
— team member removal eventsteam.member_role_updated
— team member role update eventsuser.created
— user creation eventsAll events are partitioned by Team ID to ensure:
"task:" + taskId
→ routed by teamId
"team:" + teamId
"user:" + userId
Events are published by services and consumed by other services via Kafka topics.
Events are partitioned and persisted, allowing for replay and fault-tolerant processing.
All events are durably stored in Kafka’s internal log for replay and recovery.
docker-compose.yml
(kafka service)task/internal/events/producer.go
team/internal/events/events.go
auth/internal/events/producer.go
realtime/kafka_consumer.go
notification/kafka_consumer.go
Environment Variables:
KAFKA_BROKERS
— Kafka broker addresses (default: dev_kafka:9092
)KAFKA_TOPIC_PREFIX
— optional topic prefixKAFKA_GROUP_ID
— consumer group IDAll events follow a consistent JSON structure:
{
"eventType": "task.created",
"taskId": 123,
"teamId": 456,
"actorId": 789,
"timestamp": "2025-01-20T10:30:00Z",
"payload": { ... }
}
teamId
to enable parallel processing across teams\newpage