Event-Driven Architecture (EDA) is a software architecture model in which applications and services communicate through events: changes of state or relevant facts that other components can detect and process.
This approach makes it possible to decouple producers and consumers, run processes asynchronously and respond to what is happening across systems in real time or near real time.
An Event-Driven Architecture involves:
- event producers,
- consumers, and
- event channels or brokers
Together, these components distribute information across the architecture. Technologies such as Apache Kafka, Confluent, RabbitMQ, AWS EventBridge, Google Cloud Pub/Sub and Azure Event Grid support different messaging and event-streaming models in distributed architectures, microservices, cloud systems and hybrid environments.
In this guide, we will cover:
- how an Event-Driven Architecture (EDA) works,
- its core components,
- the differences between Pub/Sub and Event Streaming,
- the benefits it offers, and
- when it makes sense to use it.
We will also look at the aspects that often receive less attention:
- the risks involved,
- when it can add unnecessary complexity, and
- how to introduce Event-Driven Architecture (EDA) gradually into an existing architecture.
- What is Event-Driven Architecture (EDA) and how does it work?
- Synchronous architecture vs. Event-Driven Architecture (EDA)
- What are the core components of an Event-Driven Architecture?
- Pub/Sub and Event Streaming: are they the same?
- Benefits of Event-Driven Architecture (EDA)
- What is the relationship between microservices and Event-Driven Architecture?
- Use cases for Event-Driven Architecture
- When should you NOT use Event-Driven Architecture?
- Common risks and mistakes in Event-Driven Architectures
- How to implement Event-Driven Architecture
- Event-Driven Architecture and legacy systems: do you need to replace everything?
- Frequently asked questions about event-driven architecture
What is Event-Driven Architecture (EDA) and how does it work?
Event-Driven Architecture (EDA) is a model in which the different components of a system react to events that have already happened, rather than relying solely on direct requests between services.
An event represents a change of state or a relevant fact within a process. For example:
- Order #1234 completed
- Payment confirmed
- Stock below threshold
- User registered
- Machine temperature outside the normal range
Once published, an event represents something that has happened and should not be changed. Other systems can receive it and decide what action to take in response.
The basic flow can be summarised as follows:
- An event occurs. A system detects a relevant change.
- A producer creates the event. The service creates a representation of what happened.
- The event is published to a channel or broker.
- One or more consumers receive or read the event.
- Each consumer runs its own logic independently.
Imagine a customer completes a purchase. The order service publishes an event stating that the order has been completed.
From that single event:
- inventory can update stock levels,
- logistics can prepare the shipment,
- marketing can update the customer profile,
- billing can generate the invoice,
- analytics can record the conversion.
The service that generates the event does not need to call each of these systems individually or know what they will do next.
That is one of the main differences compared with a traditional synchronous request-response model.
Keep learning: EDA & API Management: the key combination for governed, scalable asynchronous APIs
Synchronous architecture vs. Event-Driven Architecture (EDA)
In a synchronous architecture, one service asks another to perform an action and usually waits for a response before it can continue.
In an Event-Driven Architecture (EDA), the producer communicates that something has happened, and consumers react independently.
| Synchronous architecture | Event-Driven Architecture |
| Direct communication between services | Communication through events |
| The requester knows the receiver | The producer does not need to know the consumers |
| Usually waits for a response | Processing is typically asynchronous |
| Greater temporal dependency | Greater temporal decoupling |
| Suitable for operations that require an immediate response | Suitable for reactions, change propagation and distributed processing |
This does not mean an architecture has to be entirely synchronous or entirely event-driven.
In enterprise environments, both models commonly coexist: synchronous APIs address some needs, while asynchronous events address others.
What are the core components of an Event-Driven Architecture?
An Event-Driven Architecture (EDA) is typically built around three core components.
Event producers
Producers, or publishers, are the applications or services that detect a significant change and publish the corresponding event.
A producer should simply communicate what has happened, without depending on which systems will react afterwards.
Event consumers
Consumers, or subscribers, receive or read specific types of events and execute logic in response.
Different consumers can react in completely different ways to the same event.
Event broker, channel or platform
This is the infrastructure responsible for transporting and distributing events from producers to consumers.
Depending on the architecture, it may also provide capabilities such as:
- persistence,
- ordering,
- retries,
- filtering,
- partitioning,
- scalability,
- event replay.
Technologies such as Apache Kafka, RabbitMQ and AWS EventBridge address different needs within this space.
Learn more about our Confluent Kafka technology
Pub/Sub and Event Streaming: are they the same?
No. Although both models decouple producers and consumers, Pub/Sub and Event Streaming are designed to solve different needs.
| Characteristic | Publish/Subscribe | Event Streaming |
| Primary goal | Distribute messages to one or more subscribers | Maintain and process a continuous stream of events |
| Persistence | Depends on the broker and its configuration | A persistent log is a core feature |
| Historical consumption | May be limited depending on the technology | Consumers can reread previous events |
| Processing | Focused on receiving and reacting | Focused on continuous flows and event sequences |
| Common use cases | Notifications, messaging, fan-out | Real-time analytics, data integration, ML, auditing and continuous processing |
That is why a technology should not be selected simply because it supports events.
The decision should start with questions such as:
- Do we need to retain event history?
- Do we need to replay events?
- What volume do we need to process?
- What delivery guarantees do we need?
- Does ordering matter?
- How many consumers will there be?
- Do we need real-time processing?
Benefits of Event-Driven Architecture (EDA)
Adopting EDA can deliver significant benefits when there is a genuine need for decoupling, scalability or real-time processing.
Less coupling between systems
The producer does not need to know every consumer.
This makes it possible to add new consumers without necessarily changing the service that originally produced the event.
Independent scalability
Components can scale independently according to their own workload.
If the number of orders rises sharply, for example, the consumers responsible for processing them can be scaled without having to scale the entire ecosystem.
Greater resilience
Decoupling helps isolate failures.
If a consumer is temporarily unavailable and the infrastructure retains the events, it can process them later without necessarily stopping the producer.
Real-time response
Events make it possible to react quickly to relevant changes.
This is particularly useful for:
- fraud detection,
- predictive maintenance,
- IoT,
- personalisation,
- monitoring,
- logistics,
- real-time analytics.
Greater agility and extensibility
An event may initially trigger two reactions and later support additional consumers.
This makes it easier to evolve capabilities without constantly changing existing integrations.
Integration across heterogeneous systems
EDA can act as a connection mechanism between microservices, cloud applications, legacy systems and third-party platforms, avoiding a proliferation of point-to-point integrations.
Read our article: What are Microservices?
What is the relationship between microservices and Event-Driven Architecture?
Event-driven architectures and microservices are often used together because EDA helps services maintain a greater degree of independence.
In an architecture based solely on synchronous calls, a microservice may end up depending on several external services to complete an operation.
Events can reduce some of those dependencies.
For example, the order service can publish that an order has been completed and continue running without needing direct knowledge of the inventory, logistics, marketing or analytics services that will react afterwards.
However, using microservices does not require EDA, and using EDA does not require microservices. They are complementary concepts, not equivalent ones.
You may also be interested in: Communication between microservices: methods, types and styles
Use cases for Event-Driven Architecture
EDA is particularly useful in processes where different systems need to react quickly to a change.
Banking and FinTech
Detecting a potentially fraudulent transaction can trigger several processes in parallel:
- analyse the risk,
- temporarily block a card,
- alert the customer,
- notify the security team.
Retail and e-commerce
Events such as a product being viewed, a purchase being completed or stock being updated can be used to:
- update inventory,
- trigger logistics processes,
- personalise recommendations, or
- update analytics systems.
Industry and IoT
Sensors continuously generate events related to temperature, vibration, pressure or machine status.
Processing these events makes it possible to identify anomalies and feed predictive maintenance models.
Logistics
Every change in a parcel’s status can generate an event.
This can update customer tracking, feed operational systems and trigger responses to delays or incidents.
Data synchronisation
A change in one application can be published as an event so that other systems update their information.
This model can reduce the need for periodic polling or point-to-point integrations.
Real-time analytics and processing
Event streams can feed analytics systems as data is being produced, rather than relying exclusively on later batch processes.
When should you NOT use Event-Driven Architecture?
EDA is not the right solution for every problem.
Introducing asynchrony, brokers, schemas, retries, observability and distributed processing also brings greater operational and architectural complexity.
Simple synchronous processes
If one service needs to request a specific piece of data from another and receive an immediate response, a synchronous API may be considerably simpler.
For example, certain identity checks or one-off queries do not need to be turned into events.
Small, stable systems
If an application has only a few components and there is little need to scale or evolve them independently, introducing an event platform can add more complexity than it removes.
Processes that require immediate consistency
In some transactional processes, the outcome of several operations may need to be known before the process can continue.
This does not rule out EDA, but it does require careful design around consistency, compensating actions and state management. In simpler scenarios, a synchronous model may be more appropriate.
When the organisation is not ready to operate distributed systems
An Event-Driven Architecture requires:
- observability,
- governance,
- schema management,
- error handling,
- monitoring,
- operational capability.
Adopting Kafka or any other platform does not solve these issues by itself.
Common risks and mistakes in Event-Driven Architectures
Creating events for everything
Not every technical change needs to become a business event.
Too many events create noise, make flows harder to understand and introduce unnecessary dependencies.
Events should represent facts that are meaningful enough to matter to other consumers.
Ignoring duplicates and retries
Consumers must be designed to handle situations such as:
- repeated processing,
- temporary errors,
- retries,
- events arriving later than expected.
Designing idempotent consumers and defining clear retry policies helps reduce these problems.
Failing to define contracts and schemas
Decoupling does not mean there is no contract.
Producers and consumers still need to share a common definition of the event.
Schemas using Avro, JSON Schema or specifications such as AsyncAPI can help establish this structure and control how it evolves.
Poor version management
Changing an event format can affect many consumers at the same time.
That is why compatibility, versioning and schema-evolution rules should be defined from the outset.
Insufficient observability
With a synchronous call, it is relatively straightforward to follow the path of a request.
In a distributed, asynchronous architecture, a single operation can trigger multiple events and services.
Tools and standards such as OpenTelemetry can help build distributed tracing and correlate what happens across different components.
How to implement Event-Driven Architecture
1. Start with a well-defined use case
Do not transform the entire business core in your first project.
Choose a process that delivers value while keeping risk manageable, for example:
- notifications,
- data replication,
- updating a dashboard,
- synchronisation between two applications.
This makes it possible to validate the architecture, technology and operational capabilities before scaling the model.
2. Design events around the business domain
An event should reflect something meaningful that has already happened.
“Order completed” usually represents the domain better than an overly technical label such as “Order Status Field Updated”.
The quality of the event model will have a major impact on the architecture’s long-term maintainability.
3. Define governance from the outset
Establish:
- event owners,
- naming conventions,
- schemas,
- compatibility rules,
- versioning,
- documentation,
- retention policies,
- error management.
An event catalogue also allows teams to discover existing events before creating new ones.
4. Design the error-handling strategy
You need to decide what happens when a consumer cannot process an event.
Options include:
- retries,
- backoff,
- dead-letter queues,
- alerts,
- reprocessing.
This design should not be left until the first production errors appear.
5. Plan for observability
An event platform should provide visibility into:
- throughput,
- latency,
- consumer lag,
- errors,
- availability,
- unprocessed events.
This should be complemented by tracing so that business processes distributed across different services can be followed end to end.
6. Plan how EDA will coexist with the current architecture
Few organisations start from scratch.
EDA and ESB/SOA are not necessarily mutually exclusive.
An ESB can act as an event producer or consumer, allowing legacy applications to become part of a more distributed architecture over time.
Another option is the Strangler Fig pattern, which gradually replaces capabilities in a monolith with new components while both models coexist during the transition.
This is one of the areas where a pragmatic approach matters most, adopting EDA does not mean redesigning the entire organisation around events.
Do not miss our new article: Continuous modernisation: keeping legacy systems and microservices in sync as the business evolves
7. Choose the technology based on the problem
Not every Event-Driven Architecture needs Kafka.
Depending on the scenario:
- Apache Kafka or Confluent: event streaming, high throughput, persistence and replay,
- RabbitMQ: messaging, queues and asynchronous processing,
- AWS EventBridge, Google Cloud Pub/Sub or Azure Event Grid: cloud architectures and managed services,
- Apache Flink: advanced stream processing and analytics.
The decision should be driven by the use case, volume, required guarantees, available skills and existing architecture.
Event-Driven Architecture and legacy systems: do you need to replace everything?
No. An organisation can introduce event-driven capabilities gradually without immediately replacing its existing systems.
Legacy applications, ESBs and modern platforms can act as producers or consumers while selected capabilities are gradually moved to new services.
This approach makes it possible to use EDA where it genuinely adds value while keeping synchronous models or existing architectures where they are still appropriate.
At Chakray, we treat Event-Driven Architecture as a capability within a broader integration strategy, not as an end in itself.
Our team can help you identify which processes genuinely benefit from EDA, choose the right technology and design a roadmap that can coexist with APIs, legacy systems, microservices and cloud environments.
If you are evaluating an Event-Driven Architecture or want to evolve an existing implementation, contact our team and tell us about your scenario!
Frequently asked questions about event-driven architecture
What is Event-Driven Architecture?
Event-Driven Architecture (EDA) is a model in which systems communicate by producing and consuming events that represent facts or changes of state.
How does Event-Driven Architecture work?
A producer creates an event and publishes it through a broker or channel. One or more consumers then receive or read it and independently execute actions in response.
What is the difference between Pub/Sub and Event Streaming?
Pub/Sub is primarily designed to distribute messages between publishers and subscribers. Event Streaming is typically based on a persistent stream of events that can be stored, processed and consumed again.
What are the benefits of Event-Driven Architecture?
Pub/Sub is primarily designed to distribute messages between publishers and subscribers. Event Streaming is typically based on a persistent stream of events that can be stored, processed and consumed again.
When should Event-Driven Architecture be used?
It is particularly useful when several systems need to react to changes, large volumes of data are involved, real-time processing is required, or components need to evolve and scale independently.
Can Event-Driven Architecture coexist with legacy systems?
Yes. Legacy systems can act as event producers or consumers and coexist with new components during a gradual modernisation process.


Talk to our experts!
Contact our team and discover the cutting-edge technologies that will empower your business.
contact us






