Kafka writes data directly on disk?
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Apache Kafka, an open-source stream-processing software platform developed by the Apache Software Foundation, is written in Scala and Java. Kafka is designed to provide a high-throughput, low-latency platform for handling real-time data feeds. One of the key features of Kafka's design is its reliance on disk storage to maintain large amounts of data, which enhances both its performance and durability.
How Kafka Writes Data Directly on Disk
Kafka stores its data in a structure called a topic, which is essentially a categorization of data. Each topic is split into partitions which are evenly distributed across multiple servers in the Kafka cluster for load balancing. Let’s dig deeper into how Kafka manages these data writes:
Log Structured Storage:
Kafka's core data structure is a partition log. A log is simply an append-only sequence of records ordered by time. The design choice of appending to logs ensures that writes are sequential, thereby minimizing the seek time and speeding up write performance significantly. Each record within a log is assigned a unique sequential ID known as an offset.
Disk-Based Storage:
Kafka writes all data to disk directly. It uses a 'zero-copy' technique which efficiently transfers bytes from kernel space to a socket without additional copy operations in the application space. This method utilizes file system buffers effectively and reduces the I/O operation overhead involved in data transfer.
Indexes and Log Compaction:
To ensure that Kafka can offer fast reads despite the large volumes of data, it maintains index files. These index files store offsets and the corresponding positions in the log file, allowing Kafka to locate and fetch data rapidly. Besides index files, Kafka features a log compaction mechanism. This mechanism helps in removing redundant data and retaining only the latest value for each key in a topic, thus optimizing storage.
Data Durability and Replication:
Kafka ensures data durability by replicating each partition across multiple nodes. When a producer sends a message, it is first written to the leader of the partition and then replicated to a configurable number of follower nodes. This replication protocol ensures that data is not lost even in the event of a node failure.
Examples of Kafka Storage Mechanisms:
Consider a Kafka cluster with a topic that has three partitions, each replicated across three different servers for redundancy. Assume a partition log structure as follows:
- Partition 1: Maintains records related to user login details.
- Partition 2: Stores data on user transactions.
- Partition 3: Logs user activity and session information.
When data is produced to a Kafka topic, it is distributed across these partitions based on a partitioner logic, commonly by a key or in a round-robin fashion when no key is present.
Key Points Summary Table
| Feature | Description | Impact on Performance |
| Log Structured | Append-only sequence of records, stored in order of arrival. | Faster writes, simplified data management. |
| Disk-Based Storage | Data written directly to disk using zero-copy techniques. | Increased throughput and reduced latency. |
| Indexes | Offset and position mapping in log for fast data access. | Quick data retrieval even from large logs. |
| Log Compaction | Removes redundant data, only latest value is preserved. | Optimized storage, improved read efficiency. |
| Data Replication | Copies data across multiple nodes. | Ensures data durability and fault tolerance. |
Conclusion
In conclusion, Kafka's data writing mechanism which relies heavily on disk storage coupled with efficient indexing, replication, and log compaction ensures not only high performance and scalability but also reliability and durability of data. This architecture makes Kafka an excellent choice for real-time data pipelining and streaming applications across diverse industries.
Related reading
- Kafka Zookeeper - Java.net.BindException Address already in use
- Kafka Zookeeper connection issues
- Kafka zookeeper keep on showing info Message 'Accepted socket connection from /10.xxx.xxx.xxx
- KafkaAvroDeserializer does not return SpecificRecord but returns GenericRecord
- Keeping consumer alive using Kafka
- Key-Value storage with realtime multimaster replication
- KafkaAvroSerializer for serializing Avro without schema.registry.url
- Kafkacat how to delete a topic or all its messages?

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.