📖 Scenario: You are building a simple event sourcing system using Kafka. Event sourcing means storing all changes as events in order, so you can rebuild the current state anytime by replaying these events.Imagine a bank account where every deposit and withdrawal is an event. We will create events, configure a topic, process events to get the current balance, and finally print the balance.
🎯 Goal: Build a simple Kafka event sourcing example that stores deposit and withdrawal events, processes them to calculate the current balance, and prints the result.
📋 What You'll Learn
Create a list of events with exact deposit and withdrawal amounts
Create a variable for the Kafka topic name
Write a loop to process events and calculate the balance
Print the final balance
💡 Why This Matters
🌍 Real World
Event sourcing is used in banking, e-commerce, and many systems to keep a full history of changes for auditing and rebuilding state.
💼 Career
Understanding event sourcing and Kafka is valuable for backend developers, data engineers, and system architects working with real-time data and distributed systems.
Progress0 / 4 steps
1
Create the list of events
Create a list called events with these exact dictionaries representing bank transactions: {'type': 'deposit', 'amount': 100}, {'type': 'withdrawal', 'amount': 40}, {'type': 'deposit', 'amount': 60}
Kafka
Hint
Use a list with dictionaries exactly as shown. Each dictionary has keys 'type' and 'amount'.
2
Set the Kafka topic name
Create a variable called topic_name and set it to the string 'bank_account_events'
Kafka
Hint
Assign the exact string 'bank_account_events' to the variable topic_name.
3
Calculate the current balance from events
Create a variable called balance and set it to 0. Then use a for loop with variables event to iterate over events. Inside the loop, if event['type'] is 'deposit', add event['amount'] to balance. If it is 'withdrawal', subtract event['amount'] from balance.
Kafka
Hint
Start balance at 0. Loop through events. Add or subtract amounts based on event type.
4
Print the final balance
Write a print statement to display the text 'Current balance:' followed by the value of balance using an f-string.
Kafka
Hint
Use print(f"Current balance: {balance}") to show the result.
Practice
(1/5)
1. What is the main purpose of the event sourcing pattern in Kafka?
easy
A. To save every change as an event for a full history
B. To delete old data to save storage space
C. To process only the latest state without history
D. To send events only to one consumer
Solution
Step 1: Understand event sourcing concept
Event sourcing means saving every change as a separate event instead of just the current state.
Step 2: Relate to Kafka usage
Kafka topics store these events so consumers can read the full history and rebuild state if needed.
Final Answer:
To save every change as an event for a full history -> Option A
Quick Check:
Event sourcing = full history saved as events [OK]
Hint: Event sourcing always stores all changes, not just current state [OK]
Common Mistakes:
Thinking event sourcing deletes old data
Believing it only keeps latest state
Assuming events go to only one consumer
2. Which Kafka component is primarily used to store events in event sourcing?
First create id 1 with value 10, then update id 1 to 20, create id 2 with 5, then delete id 1.
Step 2: Determine final state
After deletion, id 1 is removed, only id 2 with value 5 remains.
Final Answer:
{"2": 5} -> Option D
Quick Check:
Delete removes id 1, only id 2 left [OK]
Hint: Track events step-by-step to update state correctly [OK]
Common Mistakes:
Forgetting the delete event removes id 1
Confusing update with create
Assuming old values remain after update
4. Identify the bug in this Kafka event consumer code snippet for event sourcing:
state = {}
for event in events:
if event["type"] == "create":
state[event["id"]] = event["value"]
elif event["type"] == "update":
if event["id"] in state:
state[event["id"]] = event["value"]
elif event["type"] == "delete":
del state[event["id"]]
medium
A. Missing else clause for unknown event types
B. Using del without checking if id exists causes KeyError
C. Create should not overwrite existing id
D. Update should create new id if not present
Solution
Step 1: Analyze delete operation
Using del without checking if the key exists can cause a KeyError if id is missing.
Step 2: Check other conditions
Update correctly checks if id exists before updating; create overwrites which is allowed; else clause is optional.
Final Answer:
Using del without checking if id exists causes KeyError -> Option B
Quick Check:
del without check = KeyError risk [OK]
Hint: Always check key exists before deleting from dict [OK]
Common Mistakes:
Ignoring KeyError on delete
Thinking update must create new id
Believing create cannot overwrite
5. You want to rebuild the current state from a Kafka topic storing events using event sourcing. Which approach is best to handle a large number of events efficiently?
hard
A. Read all events from the beginning every time to rebuild state
B. Only read the latest event for each entity from the topic
C. Use snapshots periodically and then replay only recent events
D. Delete old events from the topic to reduce size
Solution
Step 1: Understand rebuilding state from events
Replaying all events from the start is slow for large data; deleting events loses history.
Step 2: Use snapshots to optimize
Snapshots save a recent state, so only new events after snapshot need replay, improving efficiency.
Final Answer:
Use snapshots periodically and then replay only recent events -> Option C