Kafka - fetch.max.wait.ms - how does it behave with multiple partitions?
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
Apache Kafka is a popular distributed event streaming platform capable of handling trillions of events a day. One key to Kafka's high performance and scalability is its ability to fine-tune how data is consumed from topics, which are divided into multiple partitions. The configuration setting fetch.max.wait.ms is a critical parameter that influences consumer behavior in Kafka.
Understanding fetch.max.wait.ms
fetch.max.wait.ms is a configuration property for Kafka consumers. It specifies the maximum amount of time the Kafka Broker will wait before responding to a consumer fetch request if there isn't sufficient data to meet fetch.min.bytes. The fetch.min.bytes setting determines the minimum amount of data that the broker should collect before sending it back to the consumer. If this minimum isn't reached, the broker waits until either sufficient data becomes available or fetch.max.wait.ms time passes.
How fetch.max.wait.ms Works with Multiple Partitions
In a Kafka topic, data is spread across multiple partitions, which can be hosted on different servers. This distribution helps in parallel processing and enhances Kafka's performance and fault tolerance. When a consumer makes a fetch request to a Kafka broker, there are multiple partitions to be considered.
Here’s what happens:
- Multiple Fetch Requests: If a consumer is consuming from multiple partitions, it usually sends a fetch request for each partition.
- Broker Aggregation: The broker aggregates these requests and checks each partition for available data. If the
fetch.min.bytescondition is satisfied for any partition, the broker returns the data immediately for that partition. - Waiting Time: If
fetch.min.bytesis not satisfied, the broker waits up tofetch.max.wait.msmilliseconds. During this time, if the specified amount of data becomes available in any of the partitions, the broker will return the data for those partitions. - Response Handling: Even if the
fetch.max.wait.mstime elapses without reachingfetch.min.bytes, the broker sends whatever data is available (which could be none) to the consumer.
It's crucial to note that fetch.max.wait.ms applies independently to each partition's fetch request when handled by the broker. This means the broker may send data from different partitions at slightly different times within the fetch.max.wait.ms window, depending on when data becomes available.
Example Scenario
Consider a Kafka consumer configured with fetch.min.bytes=5000 and fetch.max.wait.ms=100 millisecond. The consumer subscribes to a topic with three partitions. Suppose currently, the partitions have 1000, 2500, and 4000 bytes of data available respectively.
- Time = 0ms: Fetch request sent for all partitions.
- Time = 100ms: Since none of the partitions meet the
fetch.min.bytescondition and 100 ms have passed, the broker returns whatever data is available (1000, 2500, and 4000 bytes from each partition).
Configuring fetch.max.wait.ms Optimally
Optimal settings for fetch.max.wait.ms depend on specific use cases:
- Higher throughput but higher latency: Increase
fetch.max.wait.ms, allowing the broker more time to collect a larger batch of data. - Lower latency but possibly lower throughput: Decrease
fetch.max.wait.ms, causing the broker to return data more quickly, even if it is less thanfetch.min.bytes.
Summary Table
| Configuration | Description | Impact |
fetch.max.wait.ms | Max time to wait for fetch.min.bytes to be met | Balances latency and throughput |
fetch.min.bytes | Minimum amount of data in bytes the broker should wait for before sending data | Avoids network overhead |
| Multiple Partitions | Data distributed in multiple logs across brokers | Can impact aggregation and timing |
Conclusion
Understanding and configuring fetch.max.wait.ms is crucial for balancing the trade-offs between latency and throughput in Kafka consumer applications. With optimal settings adjusted to the particular characteristics of your workload and Kafka cluster, performance can be significantly enhanced, especially in environments with multiple partitions.

