reinkarnation.space / blog

Scaling Kafka Partitions: Why You Can't Simply Scale Down

Published April 27, 2026 | Bhanu Pratap

Back to all posts

I recently had an interesting conversation exploring a common Kafka question: Why can't you reduce the number of partitions in a Kafka topic?

It turns out that Kafka deliberately does not support reducing partition counts, and the reason is deeply tied to how it guarantees ordering and data integrity.

The Core Problem: Data is Already Distributed

When you produce messages, Kafka distributes them across partitions (either via a key hash or round-robin). Each partition holds an ordered, immutable log of offsets. If you reduce partitions from, say, 6 to 3, Kafka would have to answer a dangerous question: what happens to the data in the removed partitions?

There are only two logical options, and both are unsafe:

Furthermore, Kafka only guarantees ordering within a partition, not across them. Merging independent ordered logs into one would interleave messages with no deterministic ordering, completely destroying producer intent.

How Scaling Actually Works in Kafka

Scaling in Kafka is asymmetric. Scaling up is easy; scaling down is a process.

Scaling Up (Adding Capacity)

Scaling Down (Reducing Capacity)

Since you can't just "hit a button" to reduce partitions, here is the safe approach:

The Practical Scaling Pattern

Because of this asymmetry, teams typically follow these standards:

  1. Over-partition at creation: Provision more partitions than you need today (e.g., 10–20x expected peak parallel consumption). This gives you headroom to scale consumers up later.
  2. Scale consumers elastically: Add/remove consumer instances freely within the partition ceiling. This is where true elasticity lives in Kafka!
  3. Scale brokers for throughput/storage: Add brokers and reassign partitions to spread the underlying load.
  4. Treat partition count as a schema decision: Choose it carefully upfront, like a database schema. Changing it later is costly.

Ultimately, a helpful mental model is this: Brokers control storage and throughput. Partitions set your parallelism ceiling. Consumers represent your actual, elastic parallelism operating within that ceiling.