Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).

Motivation

...

The ProducerPerformance tool is the standard for benchmarking Kafka producer send performance. The tool uses sampling and Java’s System.currentTimeMillis() to record latencies and provide percentiles at the end of each run. This method works well in most cases but results in a lack of precision.


This is a problem in low-latency environments in which sending a message takes at most a couple milliseconds. For example, if a user wants to run a benchmark test comparing two different Kafka cluster setups, it is hard to compare results if low latency values are observed.


Example:

Benchmark #1: average latency = 2 ms

Benchmark #2: average latency = 3 ms


Since System.currentTimeMillis() gives values with millisecond precision:

  • A result of 2 ms can have a true value between [1.5, 2.5) before rounding
  • A result of 3 ms can have a true value between [2.5, 3.5) before rounding


If we want to calculate the increase in latency observed, then we have a big spread of either:

  • (1) Smallest spread: 2.5-(2.5) or ~0, resulting in approximately ~0% increase in latency
  • (2) Largest spread: (3.5)-1.5 or ~2, resulting in approximately 2/2 or ~100% increase in latency


This means we cannot effectively compare these two benchmark results as the latency in #2 is anywhere from 0 to 100% higher than in #1, which is a big spread and results in very different implications. 

Public Interfaces

Briefly list any new interfaces that will be introduced as part of this proposal or any existing interfaces that will be removed or changed. The purpose of this section is to concisely call out the public contract that will come along with this feature.

...