If you have started using Kafka recently, you must be trying to find out ways to handle data streaming through your system. At Ksolves, we process a humongous amount of event data on a regular basis. That is why we know that in order to process large data, you need to distribute it onto separate partitions.
In this blog, we will discuss various strategies for partitioning the apache Kafka topic and how it depends on what consumers will do with the data.
Why should you partition your data in Kafka?
When the load is so much more that you need more than a single instance of your application, it means you need to partition your data. The producer clients decide the topic partition that the data ends up in, but the logic is driven by the fact that what the consumers do with the data. The possible strategy to use is the random one.
Still, you may need to partition on an attribute of the data if-
- The consumer of the topic needs to aggregate by some attribute of the data.
- The consumer needs some type of guarantee for ordering
- Another resource is bottleneck
- When you want to concentrate data for efficiency of storage
Random partitioning of Apache Kafka data
We utilize this system for CPU-insensitive applications- the match service. Here all instances of match service should know about all registered queries so that it can match any event. The event volume is large while the number of registered queries is small and thus a single application instance can handle holding all of them in memory.
Random partitioning offers the most even spread of load for consumers. It is best suited for stateless services.
Partition by aggregate
We must partition according to the query identifier as we need all of the events to end up at the same place. We have to break up the aggregation service into two pieces. Now, we can randomly partition on the first stage and then partition by the query ID to aggregate the final results. This approach helps us to condense the larger streams so they can manage the load balance at the second stage.
The final results are partitioned by the query identifier as the clients that consume from the results topic expect the window in a certain order.
Planning for resource bottlenecks and storage
If you are choosing a partition strategy, make sure that you plan for resource bottlenecks and storage efficiency.
Resource bottlenecks- Each consumer will be dependent only on database shards that it is linked with. Any issues with other database shards will not affect the instance or its ability of consuming from its partition.
Storage efficiency- The source topic in the query processing system shares a topic with the system. It reads the same data using a separate consumer group. For storage and access, we need to concentrate on account’s data. If any account becomes too large we have custom logic to spread it across nodes.
Consumer partition assignment
Whenever any consumer enters or leaves a consumer group, the broker rebalances the partition. That means Kafka can handle the load balancing with res[ecy to the number of partitions. It is one great feature of Kafka.
To reduce the partition shuffling on stateful services, you can use the StickyAssignor. This assignor helps in keeping partition numbers assigned to the same instance as long as they remain in the group. We use this approach for our aggregator service.
You can also take advantage of static membership which can avoid triggering a rebalance together. This approach works even if the underlying container restarts.
Instead of using a container group, you can directly assign partitions through clients that do not trigger rebalance. We generally do this in situations where we are using Apache Kafka to snapshot state.
We have discussed some best possible techniques for partitioning, still, your partitioning strategies will depend on the shape of your data and the type of processing your application does. As you grow, you have to adapt new strategies to handle the volume and shape of data. Don’t get confused, Ksolves will help you with each and every step. Being one of the best Apache Kafka development companies, we believe in delivering the best solutions even with the tightest of deadlines.
To learn more tips on working with Kafka give us a call or write all your queries in the comment section below.