Event Driven System
An event-driven system is an architecture where services communicate by producing and consuming events — discrete records of something that happened — rather than calling each other directly through synchronous APIs.
An event-driven system is an architecture where services communicate by producing and consuming events — discrete records of something that happened — rather than calling each other directly through synchronous APIs.
What the diagram shows
The diagram centers on an Event Broker (such as Kafka, RabbitMQ, or AWS SNS/SQS). Three Producer services — Order Service, Payment Service, and Inventory Service — publish domain events to named Topics on the broker. The broker persists each event in its log and fans it out to every subscribed Consumer.
Three consumer groups are shown: the Notification Service subscribes to order.created and payment.confirmed events to trigger emails and push notifications; the Analytics Service subscribes to all topics for aggregation and reporting; and the Fulfillment Service subscribes to payment.confirmed to begin warehouse picking.
A Dead Letter Queue (DLQ) receives any events that fail processing after the maximum retry count, preventing poison messages from blocking the consumer indefinitely.
Why this matters
Event-driven architectures decouple producers from consumers: the Order Service does not need to know that a Notification Service exists — it simply publishes the event and moves on. This means new consumers can be added without changing the producer at all, enabling rapid extension of system behavior.
The main challenge is reasoning about ordering and exactly-once delivery. Most brokers provide at-least-once delivery, so consumers must be idempotent. For the CQRS pattern that uses events to synchronize read and write models, see CQRS Architecture. For background job patterns that consume from these queues, see Worker Queue Processing.