Apache Kafka
Key/Value Store
Side Effects
Data Storage
Technology

What are the side effects of using Apache Kafka a a key/value store?

Master System Design with Codemia

Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.

Apache Kafka, originally designed as a high-throughput, distributed messaging system, has gained popularity in handling large-scale, real-time data streams. Despite its primary usage as a messaging broker, some have adopted Kafka as a key-value store. This approach leverages Kafka's strengths, such as scalability and fault tolerance but also leads to several side effects that are important to consider.

1. Lack of Traditional Database Features

Kafka does not offer many of the features commonly associated with more traditional key-value stores or databases, such as secondary indexes, transaction boundaries, or complex queries (e.g., joins). Kafka topics are append-only logs where data is written to the end and read from the beginning. This structure is excellent for ensuring high write throughput and data integrity but limits the ability to perform real-time, ad-hoc queries on the data.

Example: Complex Queries

Imagine needing to perform a query that involves filtering messages based on multiple attributes or requiring a join between two streams of data. Such operations are not natively supported in Kafka and require additional processing tools like Kafka Streams or external systems like Apache Spark.

2. Data Retention and Storage Management

In Kafka, data is retained on a topic for either a set period of time or until the topic reaches a certain size. While this is effective for managing data pipelines and ensuring data is available when needed, using it as a key/value store can lead to inefficient use of storage.

Challenges:

  • Data Duplication: Every update to a value must be written as a new message in the log. If not managed carefully, this can lead to significant data duplication.
  • Cleanup Policies: By default, old messages within a topic are deleted either by time or volume-based retention policies. In a key/value store model, this might inadvertently lead to loss of data that hasn't been superseded by a newer value.

3. Timeliness and State Freshness

Kafka processes records in near real-time. However, the consumption of records is dependent on how fast consumers process and how they handle offset management. This can lead to situations where the state observed by one consumer is different from another, affecting the consistency of data seen by different parts of an application.

Example: Consumer Lag

If a consumer has a processing backlog or there is a significant delay in its processing loop, it might serve stale data if queried during that time.

4. Scaling and Partitioning

Kafka scales horizontally through partitions. Each partition can only be processed by a single consumer in the same consumer group, which keeps processing simple and linearly scalable. However, this model imposes limitations when used as a distributed key/value store.

Partitioning Issues:

  • Hot Partitions: If many updates to keys are concentrated in a few partitions, it could lead to load imbalance.
  • Key Design: Poorly designed keys that do not distribute evenly over partitions can cause bottlenecks.

5. Eventual Consistency

Kafka ensures eventual consistency, particularly in setups where producers send messages asynchronously. Messages sent to a Kafka topic may be reordered in the log if retries occur following a temporary failure. For applications requiring strong consistency guarantees, this behavior is significant and necessitates custom solutions to handle message deduplication and order preservation.

Summary: Side Effects of Using Kafka as a Key/Value Store

FeatureImplication
Data ModelLimited ability to perform complex queries; updates result in duplicates
Data RetentionManagement of data lifecycle and storage can be complex
ConsistencyEventual consistency; issues with stale data
ScalabilityPotential issues with partitioning and load balancing
Operational ComplexityIncreased maintenance of partitions and consumers

Conclusion

While Kafka offers robust capabilities for handling data streams, its use as a key/value store brings unique challenges, particularly concerning query capabilities, data freshness, and storage efficiency. For use cases that require the nuanced features of traditional databases or key/value stores (like Redis or Cassandra), it is often better to use Kafka in conjunction with these types of systems rather than as a standalone solution for storing state.


Course illustration
Course illustration

All Rights Reserved.