Number of commits and offset in each partition of a kafka topic
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 capable of handling trillions of events a day. It plays a crucial role in modern data architectures, bridging the gap between data sources and data consumers. Two fundamental concepts in Kafka are the number of commits and offsets in each partition. Understanding these can vastly improve how one interacts with Kafka.
Understanding Kafka Partitions
Kafka topics are divided into partitions. This division allows topics to scale by distributing them across multiple brokers in a Kafka cluster. Each partition is an ordered, immutable sequence of records that is continually appended to—a commit log.
What is an Offset?
In Kafka, an offset is a unique identifier for each record within a partition. It denotes the position of a record in the partition. The offset value is a simple number that increments for every newly added record. Since Kafka retains all records for a set amount of time (or until a storage threshold is reached), the offset is crucial for consumers to keep track of which records have been ingested and which haven’t.
Committing Offsets
When a consumer in Kafka reads messages, it periodically commits the offsets of messages it has successfully processed. Committing an offset means that the consumer records this offset value back to Kafka (typically to a dedicated __consumer_offsets topic), marking all preceding records as consumed. This mechanism allows for fault-tolerant consumption; if a consumer fails, it can resume reading from the last committed offset.
Offset Management Modes
Kafka primarily supports two modes of offset management:
- Automatic Commit: Here, offsets are automatically committed at a configurable interval.
- Manual Commit: The consumer manually controls when offsets are committed (either synchronously or asynchronously). This gives finer control over when a record is considered processed.
Example Scenario
Consider a Kafka topic with three partitions: Partition 0, Partition 1, and Partition 2. Assume each partition has the following states:
- Partition 0: Newest committed offset - 250
- Partition 1: Newest committed offset - 100
- Partition 2: Newest committed offset - 300
These numbers represent the latest message offsets acknowledged by the consumers as processed.
Importance of Offset and Commit Monitoring
Monitoring the committed offsets and the latest message offsets (i.e., the current position of the producer's pointer) is crucial. It helps in identifying:
- Consumer Lag: The difference between the latest committed offset and the latest message offset. It signifies how far behind a consumer is from the real-time data.
- Data Loss Risks: If the offset distance grows too large, it could risk data loss when old data is purged.
- Throughput Issues: Anomalous patterns in offset commits can indicate throughput issues.
Summary Table
| Partition | Latest Message Offset | Last Committed Offset | Consumer Lag |
| 0 | 400 | 250 | 150 |
| 1 | 150 | 100 | 50 |
| 2 | 350 | 300 | 50 |
Table Explained: This table shows data for a Kafka topic across three partitions, providing a quick view of the state of message consumption.
Conclusion
The number of commits and the management of offsets are foundational to how Kafka achieves reliable message delivery and fault tolerance. Proper understanding and monitoring of these metrics are essential for maintaining the health of a Kafka system and ensuring data is processed timely and efficiently. In practice, tools like Kafka's Consumer Groups, along with monitoring solutions like Kafka Manager or Confluent Control Center, can help manage and visualize offsets and commits effectively.
Related reading
- Number of Partitions vs Producer Throughput in Apache Kafka
- object kafka is not a member of package org.apache
- Object not serializable (org.apache.kafka.clients.consumer.ConsumerRecord) in Java spark kafka streaming
- Offset missing from Kafka logs - Simple Consumer unable to proceed
- Offline data with replication/synchronization for Xamarin app on IPhone?
- offline limited multi-master in Postgres
- oh-my-zsh slow, but only for certain Git repo
- Optimal Batcher odd-even merge networks for sizes different than 2n

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.