Kafka Log Compaction not starting
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Apache Kafka is a distributed event streaming platform used for building real-time data pipelines and streaming apps. It stores records in a topic-partition structure, providing both durability and high performance. One of Kafka's features for managing data in topics is log compaction. This feature ensures that a partition retains at least the last known value for each record key, making it crucial for scenarios where the complete history of record values doesn't need to be retained, such as in stateful applications. Sometimes, however, developers might face issues where log compaction does not start or function as expected.
Understanding Log Compaction
Log compaction in Kafka ensures that your topics do not grow indefinitely and that the data remains manageable. It does so by maintaining only the latest value for each key within your Kafka topic's partitions. This mechanism is particularly useful for topics acting as a persistent store or event sourcing where each message key represents an entity or aggregate root that may undergo updates over time.
Common Reasons for Log Compaction Not Starting
Several factors and misconfigurations can prevent log compaction from starting, highlighted below:
1. Improper Configuration Settings
Log compaction is triggered based on specific topic configurations. If these are not correctly set, compaction won't occur.
cleanup.policy: This must be set to "compact".min.cleanable.dirty.ratio: Determines how much of the log can be "dirty" (i.e., able to be compacted) before compaction runs. Setting this too high might delay compaction until more of the log is dirty.delete.retention.ms: Ensures that the deleted records are retained for a specified period even after being marked for deletion.
2. Low Log Activity
If the topic experiences very low activity, there might not be enough record updates to trigger compaction. Compaction requires a certain threshold of data replacement and if the records are not updated frequently, it may not start.
3. Broker-Level Issues
Resource constraints like CPU, I/O throughput, or memory can also impact the compaction process. If the Kafka brokers are under heavy load or lack adequate resources, log compaction might lag or not trigger.
Troubleshooting Log Compaction
To address these issues, here’s what you can do:
- Check Topic Configuration: Verify that the topic is configured with
cleanup.policyset to compact. You can check and update this using Kafka’s command-line tools. - Adjust
min.cleanable.dirty.ratio: If this is set too high (default is 0.5), consider lowering it to see if compaction begins. - Monitor Broker Logs and Performance: Look for warnings or errors in the Kafka broker logs that might indicate problems. Also, monitor the performance metrics related to disk I/O and CPU usage.
- Increase Broker Resources: If resource constraints are an issue, scale your Kafka deployment appropriately.
Summary Table
| Setting | Recommended Configuration |
cleanup.policy | Should be set to compact |
min.cleanable.dirty.ratio | Lower values can lead to more frequent compactions |
delete.retention.ms | Adjust based on application retention needs |
Conclusion
Log compaction not starting in Kafka is typically an issue related to configuration settings, insufficient data changes, or resource limitations. By ensuring proper configurations, monitoring system performance, and potentially adjusting the workload or resources, you can mitigate most compaction issues. Understanding the nuances of how compaction works will help in optimizing Kafka for durability and performance in long-running, state-sensitive applications.
Related reading
- Kafka Login module not specified in JAAS config
- kafka log.retention.hours inconsistency in multiple brokers
- kafka logs + how to limit the logs size
- Kafka log.segment.bytes vs log.retention.hours
- Kafka maximum number of connections
- Kafka message corrupted in master but replica looks good
- kafka loses all topics on reboot
- Kafka Mirror Maker failing to replicate __consumer_offset topic

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.