How to Implement Event Driven Architecture in Kafka
To implement
event driven architecture in Kafka, create producers that send events to topics, and consumers that listen to these topics to react to events asynchronously. This setup decouples services and enables scalable, real-time data flow.Syntax
In Kafka, event driven architecture uses three main parts:
- Producer: Sends events (messages) to a
topic. - Topic: A named channel where events are stored.
- Consumer: Reads events from the
topicand processes them.
Each event is a message with a key and value, sent asynchronously.
bash
kafka-console-producer --broker-list localhost:9092 --topic my-topic kafka-console-consumer --bootstrap-server localhost:9092 --topic my-topic --from-beginning
Example
This example shows a simple Kafka producer sending events and a consumer receiving them to demonstrate event driven flow.
python
from kafka import KafkaProducer, KafkaConsumer import json # Producer sends JSON events to 'events' topic producer = KafkaProducer(bootstrap_servers='localhost:9092', value_serializer=lambda v: json.dumps(v).encode('utf-8')) # Send an event producer.send('events', {'event_type': 'user_signup', 'user_id': 123}) producer.flush() # Consumer listens to 'events' topic consumer = KafkaConsumer('events', bootstrap_servers='localhost:9092', auto_offset_reset='earliest', value_deserializer=lambda m: json.loads(m.decode('utf-8'))) for message in consumer: print(f"Received event: {message.value}") break # Stop after first event for demo
Output
Received event: {'event_type': 'user_signup', 'user_id': 123}
Common Pitfalls
- Not handling message serialization/deserialization properly causes errors.
- Using the same consumer group for unrelated consumers can cause missed events.
- Not setting
auto_offset_resetcan lead to consumers missing old events. - Ignoring error handling and retries can cause lost events.
Always test producers and consumers separately and ensure topics exist before sending events.
bash/python
## Wrong: Consumer without deserializer kafka-console-consumer --bootstrap-server localhost:9092 --topic events ## Right: Consumer with JSON deserialization in code consumer = KafkaConsumer('events', bootstrap_servers='localhost:9092', value_deserializer=lambda m: json.loads(m.decode('utf-8')))
Quick Reference
| Component | Purpose | Key Configurations |
|---|---|---|
| Producer | Sends events to topics | bootstrap_servers, value_serializer |
| Topic | Stores events | name, partitions, replication factor |
| Consumer | Reads events from topics | bootstrap_servers, group_id, auto_offset_reset, value_deserializer |
Key Takeaways
Use Kafka producers to send events asynchronously to topics.
Consumers read events from topics to react in an event driven way.
Proper serialization and deserialization of messages is essential.
Configure consumer groups and offsets to avoid missing events.
Test each component independently to ensure reliable event flow.