Kafka Retention Policies: Time-based and Size-based
📖 Scenario: You are managing a Kafka topic that collects user activity logs. To keep the storage efficient, you want to apply retention policies that automatically delete old messages based on time and size.
🎯 Goal: Configure a Kafka topic with both time-based and size-based retention policies, then verify the configuration by printing the topic settings.
📋 What You'll Learn
Create a Kafka topic configuration dictionary with default settings
Add a time-based retention policy of 7 days (in milliseconds)
Add a size-based retention policy of 1 GB (in bytes)
Print the final topic configuration dictionary
💡 Why This Matters
🌍 Real World
Kafka topics often collect large amounts of data. Retention policies help manage storage by deleting old or excess data automatically.
💼 Career
Understanding Kafka retention policies is important for roles like data engineers, backend developers, and system administrators who manage data pipelines and streaming platforms.
Progress0 / 4 steps
1
Create initial Kafka topic configuration
Create a dictionary called topic_config with these exact entries: 'cleanup.policy': 'delete' and 'segment.ms': 604800000 (7 days in milliseconds).
Kafka
Hint
Use a dictionary with keys 'cleanup.policy' and 'segment.ms'. The value for 'segment.ms' is 7 days in milliseconds (7 * 24 * 60 * 60 * 1000).
2
Add time-based retention policy
Add a new entry to topic_config with key 'retention.ms' and value 604800000 (7 days in milliseconds).
Kafka
Hint
Use dictionary key assignment to add 'retention.ms' with the value 604800000.
3
Add size-based retention policy
Add a new entry to topic_config with key 'retention.bytes' and value 1073741824 (1 GB in bytes).
Kafka
Hint
Use dictionary key assignment to add 'retention.bytes' with the value 1073741824.
4
Print the final topic configuration
Write print(topic_config) to display the final topic configuration dictionary.
Kafka
Hint
Use the print function to show the dictionary.
Practice
(1/5)
1. What does the retention.ms setting control in Kafka?
easy
A. The maximum size of a Kafka topic
B. How long Kafka keeps data before deleting it
C. The number of partitions in a topic
D. The replication factor of a topic
Solution
Step 1: Understand retention.ms meaning
retention.ms sets the time duration Kafka retains data before deletion.
Step 2: Compare with other options
Other options relate to size, partitions, or replication, not time retention.
Final Answer:
How long Kafka keeps data before deleting it -> Option B
Quick Check:
retention.ms = time-based retention [OK]
Hint: Remember ms means milliseconds, so it's about time [OK]
Common Mistakes:
Confusing retention.ms with retention.bytes
Thinking it controls topic size
Mixing it with partition count
2. Which of the following is the correct way to set a size-based retention policy in Kafka's topic configuration?
easy
A. "retention.bytes" = 1073741824
B. "retention.time" = 604800000
C. "retention.size" = 1073741824
D. "retention.ms" = 1073741824
Solution
Step 1: Identify correct property for size-based retention
The correct property is retention.bytes for size limits.
Step 2: Check option values and names
"retention.bytes" = 1073741824 uses retention.bytes with a size value (1GB). Others use wrong keys or time-based keys.
Final Answer:
"retention.bytes" = 1073741824 -> Option A
Quick Check:
Size retention uses retention.bytes [OK]
Hint: Size retention uses bytes, so look for retention.bytes [OK]
Common Mistakes:
Using retention.time instead of retention.ms
Using retention.size which is invalid
Confusing retention.ms with size setting
3. Given a Kafka topic with retention.ms=60000 and retention.bytes=1048576, what happens when the topic data reaches 2MB before 60 seconds pass?
medium
A. Kafka waits until 60 seconds pass before deleting any data
B. Kafka deletes data only if both time and size limits are reached
C. Kafka deletes old data immediately because size limit is reached
D. Kafka ignores retention settings and keeps all data
Solution
Step 1: Understand retention.ms and retention.bytes interaction
Kafka deletes data when either time or size limit is reached, whichever comes first.
Step 2: Analyze given values
Size limit is 1MB, data reached 2MB before 60 seconds, so size limit triggers deletion immediately.
Final Answer:
Kafka deletes old data immediately because size limit is reached -> Option C
Quick Check:
Retention triggers on earliest limit reached [OK]
Hint: Retention deletes when time OR size limit is reached [OK]
Common Mistakes:
Thinking both limits must be reached to delete
Assuming time limit always overrides size
Ignoring size limit when time not reached
4. You set retention.ms to a negative value in Kafka topic config. What is the likely outcome?
medium
A. Kafka treats it as infinite retention (never deletes data)
B. Kafka throws a configuration error and refuses to start
C. Kafka deletes data immediately after creation
D. Kafka uses default retention time instead
Solution
Step 1: Check Kafka behavior for negative retention.ms
Kafka interprets negative retention.ms as infinite retention, meaning no data deletion.
Step 2: Confirm other options
Kafka does not throw error or delete immediately; it does not revert to default automatically.
Final Answer:
Kafka treats it as infinite retention (never deletes data) -> Option A
Quick Check:
Negative retention.ms means infinite retention [OK]
Hint: Negative retention.ms disables deletion, keeps data forever [OK]
Common Mistakes:
Expecting an error on negative value
Assuming immediate deletion
Thinking default value applies automatically
5. You want to configure a Kafka topic to keep data for 2 hours or up to 500MB, whichever limit is reached first. Which configuration is correct?
hard
A. "retention.ms"=7200000 only, size limit is not needed
B. "retention.ms"=7200000 and "retention.bytes"=5000000000
C. "retention.ms"=120 and "retention.bytes"=524288000
D. "retention.ms"=7200000 and "retention.bytes"=524288000
Solution
Step 1: Convert 2 hours to milliseconds
2 hours = 2 * 60 * 60 * 1000 = 7,200,000 ms.
Step 2: Convert 500MB to bytes
500MB = 500 * 1024 * 1024 = 524,288,000 bytes.
Step 3: Match values to options
"retention.ms"=7200000 and "retention.bytes"=524288000 matches both correct values; others have wrong size or time values.
Final Answer:
"retention.ms"=7200000 and "retention.bytes"=524288000 -> Option D