Hi Matt,

Thanks for the KIP!
I agree having the warm-up records could help correctly analyze the
performance.

Some questions:
1. It looks like we will add 2 more options to producer perf tool:
 - --warmup-records
 - --combined-summary

Is this correct?
In the "public interface" section, only 1 is mentioned. Could you update it?
Also, in the KIP, you use the word: "An option such as "--warmup-records"
should be added...", it sounds like it is not decided, yet.
I suggest you update to say, we will add "--warmup-records" option for
...." to make it clear.

2. What will be the output containing both warm-up and steady-state results?
Could you give an example directly?

For better understanding, I'd suggest you refer to KIP-1057
<https://cwiki.apache.org/confluence/display/KAFKA/KIP-1057%3A+Add+remote+log+metadata+flag+to+the+dump+log+tool>
to add some examples using `kafka-producer-perf-test.sh` with the new
option, to show what it will output.

Thank you.
Luke

On Fri, Jun 21, 2024 at 10:39 AM Welch, Matt <matt.we...@intel.com> wrote:

> Hi Divij,
>
> Thanks for your response.  You raise some very important points.
> I've updated the KIP to clarify the changes discussed here.
>
> 1. I agree that warmup stats should be printed separately.  I see two
> cases here, both of which would have two summary lines printed at the end
> of the producer perf test.  In the first case, warmup-separate, the warmup
> stats are printed first as warmup-only, followed by a second print of the
> steady state performance. In the second case, warmup-combined, the first
> print would look identical to the summary line that's currently used and
> would reflect the "whole test", with a second summary print of the
> steady-state performance.  This second case would allow for users to
> compare what the test would have looked like without a warmup to results of
> the test with a warmup. Although I've been looking at the second case
> lately, I can see merits of both cases and would be happy to support the
> warmup-separate case if that's the preference of the community.  Regarding
> the JMX metrics accumulated by Kafka, we need to decide if we should reset
> the JMX metrics between the warmup and steady state. While I like the idea
> of having separate JMX buckets for warmup and steady state, these
> statistics are usually heavily windowed, so should naturally settle toward
> steady-state values after a warmup.
>
> 2. The total number of records sent by the producer and defined by
> '--num-records' MUST be strictly greater than the '--warmup-records' or an
> error will be thrown. Negative warmup records should similarly throw an
> error.  Specifying warmup-records of "0" should have behavior identical to
> the current implementation.
>
> 3.  You're correct that choosing the warmup duration can have a
> significant impact on the test output if care is not taken.  I've updated
> the proposed change to describe a simplistic process to choose how many
> warmup records to use.  Without understanding all the factors that go into
> a warmup, a user could run a test and watch the time series output of the
> producer test to determine when steady state has been reached and warmup
> has completed.  The number of records at which the producer hits steady
> state could then be used in subsequent tests. In practice, we find that 1
> minute is a good warmup for most cases, since aside from networking and
> storage initialization, even the JVM should be warmed up by then and using
> compiled code rather than interpreted byte code. This is more a heuristic,
> however, and measured latency and throughput of the system should be used
> to determine steady state.
>
> 4.  The current design has the user specifying the warmup records like
> they would specify the number of records for the test. While this is
> related to the throughput, it seemed a better option to have the user
> specify the number of records in the warmup, rather than some kind of
> duration which would be more complex to track. I completely agree with your
> concern of warmup affecting steady state, however, especially in short
> tests. With a warmup "removing" some of the high latency from steady state
> results, it could be tempting for users to run very short tests since they
> no longer need to wait long to achieve a repeatable steady-state result. I
> would consider this a case of insufficient warmup since Kafka could still
> be processing the warmup records as you mention. Best practice for warmup
> duration would be to hit steady state during the warmup and only then
> consider it a successful warmup. Our preferred process is to monitor
> producer latency until it hits steady state in a first test, then double
> that duration for the warmup in subsequent testing. One minute is usually
> sufficient. A problem does occur when using unlimited throughput since the
> user does not yet know how fast the producers will send so can't estimate
> warmup records. If the iterative testing described above is not possible to
> estimate a warmup, the user must choose a fairly large number of records
> for the warmup.
>
> Best Regards,
> Matt Welch
>
>
> -----Original Message-----
> From: Divij Vaidya <divijvaidy...@gmail.com>
> Sent: Sunday, June 16, 2024 11:21 AM
> To: dev@kafka.apache.org
> Subject: Re: [DISCUSS] KIP-1052: Enable warmup in producer performance test
>
> Thank you for the KIP, Matt.
>
> Totally agree on having a warm-up for benchmark testing. The initial
> producer setup time could involve things such as network connection setup
> (including authN, SSL handshake etc), DNS resolution, metadata fetching etc
> which could impact the result of steady-state performance.
>
> May I suggest adding some more clarity to the KIP about the following:
>
> 1. Should we also include the metrics for warm-up separately (instead of
> having them as 0)? This would have the advantage of reporting both warm up
> performance and steady state performance in the same benchmark run. A
> similar report is followed by JMH (https://github.com/openjdk/jmh) as
> well.
> You can look at it for some inspiration.
>
> 2. Please add validation that num-records should be greater than warm-up
> records. Else report an error.
>
> 3. Please add a recommendation in the docs for the tool on what an ideal
> value for warm up should be. For users who may not be completely familiar
> with producer buffering / back-pressure, it would be useful to understand a
> good value to set. In my opinion,
>
> 4. I wonder how the --throughput parameter works with the warmup! Could we
> have a situation where the "steady-state" is impacted by the warm-up
> traffic? As an example, we could land in a situation where the slow
> processing of warm-up messages could impact the measurement of
> steady-state. This could happen in a situation when warm-up messages are
> waiting to be processed on the server (or maybe on the producer buffer) but
> we have started recording end-to-end latency for the steady-state messages.
> I imagine this should be ok because it achieves the purpose of removing
> bootstrap times, but I haven't been able to reason about it in my head.
> What are your thoughts on this?
>
> --
> Divij Vaidya
>
>
>
> On Fri, Jun 14, 2024 at 12:23 AM Eric Lu <erickandmorty2...@gmail.com>
> wrote:
>
> > Hi Matt,
> >
> > Yes I forgot to update the KIP counter after creating a KIP. I changed
> > mine to 1053. We should be all good now.
> >
> > Cheers,
> > Eric
> >
> > On Thu, Jun 13, 2024 at 3:08 PM Welch, Matt <matt.we...@intel.com>
> wrote:
> >
> > > Hello again Kafka devs,
> > >
> > > I'd like to again call attention to this KIP for discussion.
> > > Apparently, we encountered a race condition when choosing KIP
> > > numbers,
> > but
> > > hopefully it's straightened out now.
> > >
> > > Regards,
> > > Matt
> > >
> > >
> > > -----Original Message-----
> > > From: Welch, Matt <matt.we...@intel.com>
> > > Sent: Thursday, June 6, 2024 4:44 PM
> > > To: dev@kafka.apache.org
> > > Subject: [DISCUSS] KIP-1052: Enable warmup in producer performance
> > > test
> > >
> > > Hello all,
> > >
> > > I'd like to propose a change that would allow the producer
> > > performance test to have a warmup phase where the statistics
> > > gathered could be separated from statistics gathered during steady
> state.
> > >
> > > Although startup is an important phase of Kafka operations and
> > > special attention should be paid to optimizing startup performance,
> > > often we
> > would
> > > like to understand Kafka performance during steady-state operation,
> > > separate from its performance during producer startup.  It's common
> > > for
> > new
> > > producers, like in a fresh producer performance test run, to have
> > > high latency during startup. This high latency can complicate the
> > understanding
> > > of steady-state performance, even when collecting long-running
> > > tests.  If we want to understand steady-state latency separate from
> > > startup latency, we can collect measurements for each phase in
> > > disjoint sets then present statistics on each set independently or
> > > as a combined population of measurements.  This feature would be
> > > completely optional and could be represented by a new command line
> > > flag for the producer performance test, '--warmup-records'.
> > >
> > > KIP: KIP-1052: Enable warmup in producer performance test - Apache
> > > Kafka
> > -
> > > Apache Software Foundation<
> > >
> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-1052%3A+Enable+w
> > armup+in+producer+performance+test
> > > >
> > >
> > > Thank you,
> > > Matt Welch
> > >
> > >
> >
>

Reply via email to