I have updated the KIP to use "request.percentage" quotas where the
percentage is out of a total of (num.io.threads * 100). I have added the
other options considered so far under "Rejected Alternatives".

To address Todd's concern about per-thread quotas: Even though the quotas
are out of (num.io.threads * 100)  clients are not locked into threads.
Utilization is measured as the total across all the I/O threads and 10 %
quota can be 1% of 10 threads. Individual quotas can also be greater than
100% if required.

Please let me know if there are any other concerns or suggestions.

Thank you,

Rajini

On Wed, Mar 8, 2017 at 10:20 PM, Todd Palino <tpal...@gmail.com> wrote:

> Rajini -
>
> I understand what you’re saying, but the point I’m making is that I don’t
> believe we need to take it into account directly. The CPU utilization of
> the network threads is directly proportional to the number of bytes being
> sent. The more bytes, the more CPU that is required for SSL (or other
> tasks). This is opposed to the request handler threads, where there are a
> number of factors that affect CPU utilization. This means that it’s not
> necessary to separately quota network thread byte usage and CPU - if we
> quota byte usage (which we already do), we have fixed the CPU usage at a
> proportional amount.
>
> Jun -
>
> Thanks for the clarification there. I was thinking of the utilization
> percentage as being fixed, not what the percentage reflects. I’m not tied
> to either way of doing it, provided that we do not lock clients to a single
> thread. For example, if I specify that a given client can use 10% of a
> single thread, that should also mean they can use 1% on 10 threads.
>
> -Todd
>
>
>
> On Wed, Mar 8, 2017 at 8:57 AM, Jun Rao <j...@confluent.io> wrote:
>
> > Hi, Todd,
> >
> > Thanks for the feedback.
> >
> > I just want to clarify your second point. If the limit percentage is per
> > thread and the thread counts are changed, the absolute processing limit
> for
> > existing users haven't changed and there is no need to adjust them. On
> the
> > other hand, if the limit percentage is of total thread pool capacity and
> > the thread counts are changed, the effective processing limit for a user
> > will change. So, to preserve the current processing limit, existing user
> > limits have to be adjusted. If there is a hardware change, the effective
> > processing limit for a user will change in either approach and the
> existing
> > limit may need to be adjusted. However, hardware changes are less common
> > than thread pool configuration changes.
> >
> > Thanks,
> >
> > Jun
> >
> > On Tue, Mar 7, 2017 at 4:45 PM, Todd Palino <tpal...@gmail.com> wrote:
> >
> > > I’ve been following this one on and off, and overall it sounds good to
> > me.
> > >
> > > - The SSL question is a good one. However, that type of overhead should
> > be
> > > proportional to the bytes rate, so I think that a bytes rate quota
> would
> > > still be a suitable way to address it.
> > >
> > > - I think it’s better to make the quota percentage of total thread pool
> > > capacity, and not percentage of an individual thread. That way you
> don’t
> > > have to adjust it when you adjust thread counts (tuning, hardware
> > changes,
> > > etc.)
> > >
> > >
> > > -Todd
> > >
> > >
> > >
> > > On Tue, Mar 7, 2017 at 2:38 PM, Becket Qin <becket....@gmail.com>
> wrote:
> > >
> > > > I see. Good point about SSL.
> > > >
> > > > I just asked Todd to take a look.
> > > >
> > > > Thanks,
> > > >
> > > > Jiangjie (Becket) Qin
> > > >
> > > > On Tue, Mar 7, 2017 at 2:17 PM, Jun Rao <j...@confluent.io> wrote:
> > > >
> > > > > Hi, Jiangjie,
> > > > >
> > > > > Yes, I agree that byte rate already protects the network threads
> > > > > indirectly. I am not sure if byte rate fully captures the CPU
> > overhead
> > > in
> > > > > network due to SSL. So, at the high level, we can use request time
> > > limit
> > > > to
> > > > > protect CPU and use byte rate to protect storage and network.
> > > > >
> > > > > Also, do you think you can get Todd to comment on this KIP?
> > > > >
> > > > > Thanks,
> > > > >
> > > > > Jun
> > > > >
> > > > > On Tue, Mar 7, 2017 at 11:21 AM, Becket Qin <becket....@gmail.com>
> > > > wrote:
> > > > >
> > > > > > Hi Rajini/Jun,
> > > > > >
> > > > > > The percentage based reasoning sounds good.
> > > > > > One thing I am wondering is that if we assume the network thread
> > are
> > > > just
> > > > > > doing the network IO, can we say bytes rate quota is already sort
> > of
> > > > > > network threads quota?
> > > > > > If we take network threads into the consideration here, would
> that
> > be
> > > > > > somewhat overlapping with the bytes rate quota?
> > > > > >
> > > > > > Thanks,
> > > > > >
> > > > > > Jiangjie (Becket) Qin
> > > > > >
> > > > > > On Tue, Mar 7, 2017 at 11:04 AM, Rajini Sivaram <
> > > > rajinisiva...@gmail.com
> > > > > >
> > > > > > wrote:
> > > > > >
> > > > > > > Jun,
> > > > > > >
> > > > > > > Thank you for the explanation, I hadn't realized you meant
> > > percentage
> > > > > of
> > > > > > > the total thread pool. If everyone is OK with Jun's
> suggestion, I
> > > > will
> > > > > > > update the KIP.
> > > > > > >
> > > > > > > Thanks,
> > > > > > >
> > > > > > > Rajini
> > > > > > >
> > > > > > > On Tue, Mar 7, 2017 at 5:08 PM, Jun Rao <j...@confluent.io>
> > wrote:
> > > > > > >
> > > > > > > > Hi, Rajini,
> > > > > > > >
> > > > > > > > Let's take your example. Let's say a user sets the limit to
> > 50%.
> > > I
> > > > am
> > > > > > not
> > > > > > > > sure if it's better to apply the same percentage separately
> to
> > > > > network
> > > > > > > and
> > > > > > > > io thread pool. For example, for produce requests, most of
> the
> > > time
> > > > > > will
> > > > > > > be
> > > > > > > > spent in the io threads whereas for fetch requests, most of
> the
> > > > time
> > > > > > will
> > > > > > > > be in the network threads. So, using the same percentage in
> > both
> > > > > thread
> > > > > > > > pools means one of the pools' resource will be over
> allocated.
> > > > > > > >
> > > > > > > > An alternative way is to simply model network and io thread
> > pool
> > > > > > > together.
> > > > > > > > If you get 10 io threads and 5 network threads, you get 1500%
> > > > request
> > > > > > > > processing power. A 50% limit means a total of 750%
> processing
> > > > power.
> > > > > > We
> > > > > > > > just add up the time a user request spent in either network
> or
> > io
> > > > > > thread.
> > > > > > > > If that total exceeds 750% (doesn't matter whether it's spent
> > > more
> > > > in
> > > > > > > > network or io thread), the request will be throttled. This
> > seems
> > > > more
> > > > > > > > general and is not sensitive to the current implementation
> > detail
> > > > of
> > > > > > > having
> > > > > > > > a separate network and io thread pool. In the future, if the
> > > > > threading
> > > > > > > > model changes, the same concept of quota can still be
> applied.
> > > For
> > > > > now,
> > > > > > > > since it's a bit tricky to add the delay logic in the network
> > > > thread
> > > > > > > pool,
> > > > > > > > we could probably just do the delaying only in the io threads
> > as
> > > > you
> > > > > > > > suggested earlier.
> > > > > > > >
> > > > > > > > There is still the orthogonal question of whether a quota of
> > 50%
> > > is
> > > > > out
> > > > > > > of
> > > > > > > > 100% or 100% * #total processing threads. My feeling is that
> > the
> > > > > latter
> > > > > > > is
> > > > > > > > slightly better based on my explanation earlier. The way to
> > > > describe
> > > > > > this
> > > > > > > > quota to the users can be "share of elapsed request
> processing
> > > time
> > > > > on
> > > > > > a
> > > > > > > > single CPU" (similar to top).
> > > > > > > >
> > > > > > > > Thanks,
> > > > > > > >
> > > > > > > > Jun
> > > > > > > >
> > > > > > > >
> > > > > > > > On Fri, Mar 3, 2017 at 4:22 AM, Rajini Sivaram <
> > > > > > rajinisiva...@gmail.com>
> > > > > > > > wrote:
> > > > > > > >
> > > > > > > > > Jun,
> > > > > > > > >
> > > > > > > > > Agree about the two scenarios.
> > > > > > > > >
> > > > > > > > > But still not sure about a single quota covering both
> network
> > > > > threads
> > > > > > > and
> > > > > > > > > I/O threads with per-thread quota. If there are 10 I/O
> > threads
> > > > and
> > > > > 5
> > > > > > > > > network threads and I want to assign half the quota to
> userA,
> > > the
> > > > > > quota
> > > > > > > > > would be 750%. I imagine, internally, we would convert this
> > to
> > > > 500%
> > > > > > for
> > > > > > > > I/O
> > > > > > > > > and 250% for network threads to allocate 50% of each pool.
> > > > > > > > >
> > > > > > > > > A couple of scenarios:
> > > > > > > > >
> > > > > > > > > 1. Admin adds 1 extra network thread. To retain 50%, admin
> > > needs
> > > > to
> > > > > > now
> > > > > > > > > allocate 800% for each user. Or increase the quota for a
> few
> > > > users.
> > > > > > To
> > > > > > > > me,
> > > > > > > > > it feels like admin needs to convert 50% to 800% and Kafka
> > > > > internally
> > > > > > > > needs
> > > > > > > > > to convert 800% to (500%, 300%). Everyone using just 50%
> > feels
> > > a
> > > > > lot
> > > > > > > > > simpler.
> > > > > > > > >
> > > > > > > > > 2. We decide to add some other thread to this list. Admin
> > needs
> > > > to
> > > > > > know
> > > > > > > > > exactly how many threads form the maximum quota. And we can
> > be
> > > > > > changing
> > > > > > > > > this between broker versions as we add more to the list.
> > Again
> > > a
> > > > > > single
> > > > > > > > > overall percent would be a lot simpler.
> > > > > > > > >
> > > > > > > > > There were others who were unconvinced by a single percent
> > from
> > > > the
> > > > > > > > initial
> > > > > > > > > proposal and were happier with thread units similar to CPU
> > > units,
> > > > > so
> > > > > > I
> > > > > > > am
> > > > > > > > > ok with going with per-thread quotas (as units or percent).
> > > Just
> > > > > not
> > > > > > > sure
> > > > > > > > > it makes it easier for admin in all cases.
> > > > > > > > >
> > > > > > > > > Regards,
> > > > > > > > >
> > > > > > > > > Rajini
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On Fri, Mar 3, 2017 at 6:03 AM, Jun Rao <j...@confluent.io>
> > > > wrote:
> > > > > > > > >
> > > > > > > > > > Hi, Rajini,
> > > > > > > > > >
> > > > > > > > > > Consider modeling as n * 100% unit. For 2), the question
> is
> > > > > what's
> > > > > > > > > causing
> > > > > > > > > > the I/O threads to be saturated. It's unlikely that all
> > > users'
> > > > > > > > > utilization
> > > > > > > > > > have increased at the same. A more likely case is that a
> > few
> > > > > > isolated
> > > > > > > > > > users' utilization have increased. If so, after
> increasing
> > > the
> > > > > > number
> > > > > > > > of
> > > > > > > > > > threads, the admin just needs to adjust the quota for a
> few
> > > > > > isolated
> > > > > > > > > users,
> > > > > > > > > > which is expected and is less work.
> > > > > > > > > >
> > > > > > > > > > Consider modeling as 1 * 100% unit. For 1), all users'
> > quota
> > > > need
> > > > > > to
> > > > > > > be
> > > > > > > > > > adjusted, which is unexpected and is more work.
> > > > > > > > > >
> > > > > > > > > > So, to me, the n * 100% model seems more convenient.
> > > > > > > > > >
> > > > > > > > > > As for future extension to cover network thread
> > utilization,
> > > I
> > > > > was
> > > > > > > > > thinking
> > > > > > > > > > that one way is to simply model the capacity as (n + m) *
> > > 100%
> > > > > > unit,
> > > > > > > > > where
> > > > > > > > > > n and m are the number of network and i/o threads,
> > > > respectively.
> > > > > > > Then,
> > > > > > > > > for
> > > > > > > > > > each user, we can just add up the utilization in the
> > network
> > > > and
> > > > > > the
> > > > > > > > i/o
> > > > > > > > > > thread. If we do this, we don't need a new type of quota.
> > > > > > > > > >
> > > > > > > > > > Thanks,
> > > > > > > > > >
> > > > > > > > > > Jun
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > On Thu, Mar 2, 2017 at 12:27 PM, Rajini Sivaram <
> > > > > > > > rajinisiva...@gmail.com
> > > > > > > > > >
> > > > > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > > Jun,
> > > > > > > > > > >
> > > > > > > > > > > If we use request.percentage as the percentage used in
> a
> > > > single
> > > > > > I/O
> > > > > > > > > > thread,
> > > > > > > > > > > the total percentage being allocated will be
> > > num.io.threads *
> > > > > 100
> > > > > > > for
> > > > > > > > > I/O
> > > > > > > > > > > threads and num.network.threads * 100 for network
> > threads.
> > > A
> > > > > > single
> > > > > > > > > quota
> > > > > > > > > > > covering the two as a percentage wouldn't quite work if
> > you
> > > > > want
> > > > > > to
> > > > > > > > > > > allocate the same proportion in both cases. If we want
> to
> > > > treat
> > > > > > > > threads
> > > > > > > > > > as
> > > > > > > > > > > separate units, won't we need two quota configurations
> > > > > regardless
> > > > > > > of
> > > > > > > > > > > whether we use units or percentage? Perhaps I
> > misunderstood
> > > > > your
> > > > > > > > > > > suggestion.
> > > > > > > > > > >
> > > > > > > > > > > I think there are two cases:
> > > > > > > > > > >
> > > > > > > > > > >    1. The use case that you mentioned where an admin is
> > > > adding
> > > > > > more
> > > > > > > > > users
> > > > > > > > > > >    and decides to add more I/O threads and expects to
> > find
> > > > free
> > > > > > > quota
> > > > > > > > > to
> > > > > > > > > > >    allocate for new users.
> > > > > > > > > > >    2. Admin adds more I/O threads because the I/O
> threads
> > > are
> > > > > > > > saturated
> > > > > > > > > > and
> > > > > > > > > > >    there are cores available to allocate, even though
> the
> > > > > number
> > > > > > or
> > > > > > > > > > >    users/clients hasn't changed.
> > > > > > > > > > >
> > > > > > > > > > > If we allocated treated I/O threads as a single unit of
> > > 100%,
> > > > > all
> > > > > > > > user
> > > > > > > > > > > quotas need to be reallocated for 1). If we allocated
> I/O
> > > > > threads
> > > > > > > as
> > > > > > > > n
> > > > > > > > > > > units with n*100%, all user quotas need to be
> reallocated
> > > for
> > > > > 2),
> > > > > > > > > > otherwise
> > > > > > > > > > > some of the new threads may just not be used. Either
> way
> > it
> > > > > > should
> > > > > > > be
> > > > > > > > > > easy
> > > > > > > > > > > to write a script to decrease/increase quotas by a
> > multiple
> > > > for
> > > > > > all
> > > > > > > > > > users.
> > > > > > > > > > >
> > > > > > > > > > > So it really boils down to which quota unit is most
> > > intuitive
> > > > > in
> > > > > > > > terms
> > > > > > > > > of
> > > > > > > > > > > configuration. And from the discussion so far, it feels
> > > like
> > > > > > > opinion
> > > > > > > > is
> > > > > > > > > > > divided on whether quotas should be carved out of an
> > > absolute
> > > > > > 100%
> > > > > > > > (or
> > > > > > > > > 1
> > > > > > > > > > > unit) or be relative to the number of threads (n*100%
> or
> > n
> > > > > > units).
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > On Thu, Mar 2, 2017 at 7:31 PM, Jun Rao <
> > j...@confluent.io>
> > > > > > wrote:
> > > > > > > > > > >
> > > > > > > > > > > > Another way to express an absolute limit is to use
> > > > > > > > > request.percentage,
> > > > > > > > > > > but
> > > > > > > > > > > > treat it as the percentage used in a single request
> > > > handling
> > > > > > > > thread.
> > > > > > > > > > For
> > > > > > > > > > > > now, the request handling threads can be just the io
> > > > threads.
> > > > > > In
> > > > > > > > the
> > > > > > > > > > > > future, they can cover the network threads as well.
> > This
> > > is
> > > > > > > similar
> > > > > > > > > to
> > > > > > > > > > > how
> > > > > > > > > > > > top reports CPU usage and may be a bit easier for
> > people
> > > to
> > > > > > > > > understand.
> > > > > > > > > > > >
> > > > > > > > > > > > Thanks,
> > > > > > > > > > > >
> > > > > > > > > > > > Jun
> > > > > > > > > > > >
> > > > > > > > > > > > On Fri, Feb 24, 2017 at 10:31 AM, Jun Rao <
> > > > j...@confluent.io>
> > > > > > > > wrote:
> > > > > > > > > > > >
> > > > > > > > > > > > > Hi, Jay,
> > > > > > > > > > > > >
> > > > > > > > > > > > > 2. Regarding request.unit vs request.percentage. I
> > > > started
> > > > > > with
> > > > > > > > > > > > > request.percentage too. The reasoning for
> > request.unit
> > > is
> > > > > the
> > > > > > > > > > > following.
> > > > > > > > > > > > > Suppose that the capacity has been reached on a
> > broker
> > > > and
> > > > > > the
> > > > > > > > > admin
> > > > > > > > > > > > needs
> > > > > > > > > > > > > to add a new user. A simple way to increase the
> > > capacity
> > > > is
> > > > > > to
> > > > > > > > > > increase
> > > > > > > > > > > > the
> > > > > > > > > > > > > number of io threads, assuming there are still
> enough
> > > > > cores.
> > > > > > If
> > > > > > > > the
> > > > > > > > > > > limit
> > > > > > > > > > > > > is based on percentage, the additional capacity
> > > > > automatically
> > > > > > > > gets
> > > > > > > > > > > > > distributed to existing users and we haven't really
> > > > carved
> > > > > > out
> > > > > > > > any
> > > > > > > > > > > > > additional resource for the new user. Now, is it
> easy
> > > > for a
> > > > > > > user
> > > > > > > > to
> > > > > > > > > > > > reason
> > > > > > > > > > > > > about 0.1 unit vs 10%. My feeling is that both are
> > hard
> > > > and
> > > > > > > have
> > > > > > > > to
> > > > > > > > > > be
> > > > > > > > > > > > > configured empirically. Not sure if percentage is
> > > > obviously
> > > > > > > > easier
> > > > > > > > > to
> > > > > > > > > > > > > reason about.
> > > > > > > > > > > > >
> > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > >
> > > > > > > > > > > > > Jun
> > > > > > > > > > > > >
> > > > > > > > > > > > > On Fri, Feb 24, 2017 at 8:10 AM, Jay Kreps <
> > > > > j...@confluent.io
> > > > > > >
> > > > > > > > > wrote:
> > > > > > > > > > > > >
> > > > > > > > > > > > >> A couple of quick points:
> > > > > > > > > > > > >>
> > > > > > > > > > > > >> 1. Even though the implementation of this quota is
> > > only
> > > > > > using
> > > > > > > io
> > > > > > > > > > > thread
> > > > > > > > > > > > >> time, i think we should call it something like
> > > > > > "request-time".
> > > > > > > > > This
> > > > > > > > > > > will
> > > > > > > > > > > > >> give us flexibility to improve the implementation
> to
> > > > cover
> > > > > > > > network
> > > > > > > > > > > > threads
> > > > > > > > > > > > >> in the future and will avoid exposing internal
> > details
> > > > > like
> > > > > > > our
> > > > > > > > > > thread
> > > > > > > > > > > > >> pools on the server.
> > > > > > > > > > > > >>
> > > > > > > > > > > > >> 2. Jun/Roger, I get what you are trying to fix but
> > the
> > > > > idea
> > > > > > of
> > > > > > > > > > > > >> thread/units
> > > > > > > > > > > > >> is super unintuitive as a user-facing knob. I had
> to
> > > > read
> > > > > > the
> > > > > > > > KIP
> > > > > > > > > > like
> > > > > > > > > > > > >> eight times to understand this. I'm not sure that
> > your
> > > > > point
> > > > > > > > that
> > > > > > > > > > > > >> increasing the number of threads is a problem
> with a
> > > > > > > > > > percentage-based
> > > > > > > > > > > > >> value, it really depends on whether the user
> thinks
> > > > about
> > > > > > the
> > > > > > > > > > > > "percentage
> > > > > > > > > > > > >> of request processing time" or "thread units". If
> > they
> > > > > think
> > > > > > > "I
> > > > > > > > > have
> > > > > > > > > > > > >> allocated 10% of my request processing time to
> user
> > x"
> > > > > then
> > > > > > it
> > > > > > > > is
> > > > > > > > > a
> > > > > > > > > > > bug
> > > > > > > > > > > > >> that increasing the thread count decreases that
> > > percent
> > > > as
> > > > > > it
> > > > > > > > does
> > > > > > > > > > in
> > > > > > > > > > > > the
> > > > > > > > > > > > >> current proposal. As a practical matter I think
> the
> > > only
> > > > > way
> > > > > > > to
> > > > > > > > > > > actually
> > > > > > > > > > > > >> reason about this is as a percent---I just don't
> > > believe
> > > > > > > people
> > > > > > > > > are
> > > > > > > > > > > > going
> > > > > > > > > > > > >> to think, "ah, 4.3 thread units, that is the right
> > > > > amount!".
> > > > > > > > > > Instead I
> > > > > > > > > > > > >> think they have to understand this thread unit
> > > concept,
> > > > > > figure
> > > > > > > > out
> > > > > > > > > > > what
> > > > > > > > > > > > >> they have set in number of threads, compute a
> > percent
> > > > and
> > > > > > then
> > > > > > > > > come
> > > > > > > > > > up
> > > > > > > > > > > > >> with
> > > > > > > > > > > > >> the number of thread units, and these will all be
> > > wrong
> > > > if
> > > > > > > that
> > > > > > > > > > thread
> > > > > > > > > > > > >> count changes. I also think this ties us to
> > throttling
> > > > the
> > > > > > I/O
> > > > > > > > > > thread
> > > > > > > > > > > > >> pool,
> > > > > > > > > > > > >> which may not be where we want to end up.
> > > > > > > > > > > > >>
> > > > > > > > > > > > >> 3. For what it's worth I do think having a single
> > > > > > throttle_ms
> > > > > > > > > field
> > > > > > > > > > in
> > > > > > > > > > > > all
> > > > > > > > > > > > >> the responses that combines all throttling from
> all
> > > > quotas
> > > > > > is
> > > > > > > > > > probably
> > > > > > > > > > > > the
> > > > > > > > > > > > >> simplest. There could be a use case for having
> > > separate
> > > > > > fields
> > > > > > > > for
> > > > > > > > > > > each,
> > > > > > > > > > > > >> but I think that is actually harder to use/monitor
> > in
> > > > the
> > > > > > > common
> > > > > > > > > > case
> > > > > > > > > > > so
> > > > > > > > > > > > >> unless someone has a use case I think just one
> > should
> > > be
> > > > > > fine.
> > > > > > > > > > > > >>
> > > > > > > > > > > > >> -Jay
> > > > > > > > > > > > >>
> > > > > > > > > > > > >> On Fri, Feb 24, 2017 at 4:21 AM, Rajini Sivaram <
> > > > > > > > > > > > rajinisiva...@gmail.com>
> > > > > > > > > > > > >> wrote:
> > > > > > > > > > > > >>
> > > > > > > > > > > > >> > I have updated the KIP based on the discussions
> so
> > > > far.
> > > > > > > > > > > > >> >
> > > > > > > > > > > > >> >
> > > > > > > > > > > > >> > Regards,
> > > > > > > > > > > > >> >
> > > > > > > > > > > > >> > Rajini
> > > > > > > > > > > > >> >
> > > > > > > > > > > > >> > On Thu, Feb 23, 2017 at 11:29 PM, Rajini
> Sivaram <
> > > > > > > > > > > > >> rajinisiva...@gmail.com>
> > > > > > > > > > > > >> > wrote:
> > > > > > > > > > > > >> >
> > > > > > > > > > > > >> > > Thank you all for the feedback.
> > > > > > > > > > > > >> > >
> > > > > > > > > > > > >> > > Ismael #1. It makes sense not to throttle
> > > > inter-broker
> > > > > > > > > requests
> > > > > > > > > > > like
> > > > > > > > > > > > >> > > LeaderAndIsr etc. The simplest way to ensure
> > that
> > > > > > clients
> > > > > > > > > cannot
> > > > > > > > > > > use
> > > > > > > > > > > > >> > these
> > > > > > > > > > > > >> > > requests to bypass quotas for DoS attacks is
> to
> > > > ensure
> > > > > > > that
> > > > > > > > > ACLs
> > > > > > > > > > > > >> prevent
> > > > > > > > > > > > >> > > clients from using these requests and
> > unauthorized
> > > > > > > requests
> > > > > > > > > are
> > > > > > > > > > > > >> included
> > > > > > > > > > > > >> > > towards quotas.
> > > > > > > > > > > > >> > >
> > > > > > > > > > > > >> > > Ismael #2, Jay #1 : I was thinking that these
> > > quotas
> > > > > can
> > > > > > > > > return
> > > > > > > > > > a
> > > > > > > > > > > > >> > separate
> > > > > > > > > > > > >> > > throttle time, and all utilization based
> quotas
> > > > could
> > > > > > use
> > > > > > > > the
> > > > > > > > > > same
> > > > > > > > > > > > >> field
> > > > > > > > > > > > >> > > (we won't add another one for network thread
> > > > > utilization
> > > > > > > for
> > > > > > > > > > > > >> instance).
> > > > > > > > > > > > >> > But
> > > > > > > > > > > > >> > > perhaps it makes sense to keep byte rate
> quotas
> > > > > separate
> > > > > > > in
> > > > > > > > > > > > >> produce/fetch
> > > > > > > > > > > > >> > > responses to provide separate metrics? Agree
> > with
> > > > > Ismael
> > > > > > > > that
> > > > > > > > > > the
> > > > > > > > > > > > >> name of
> > > > > > > > > > > > >> > > the existing field should be changed if we
> have
> > > two.
> > > > > > Happy
> > > > > > > > to
> > > > > > > > > > > switch
> > > > > > > > > > > > >> to a
> > > > > > > > > > > > >> > > single combined throttle time if that is
> > > sufficient.
> > > > > > > > > > > > >> > >
> > > > > > > > > > > > >> > > Ismael #4, #5, #6: Will update KIP. Will use
> dot
> > > > > > separated
> > > > > > > > > name
> > > > > > > > > > > for
> > > > > > > > > > > > >> new
> > > > > > > > > > > > >> > > property. Replication quotas use dot
> separated,
> > so
> > > > it
> > > > > > will
> > > > > > > > be
> > > > > > > > > > > > >> consistent
> > > > > > > > > > > > >> > > with all properties except byte rate quotas.
> > > > > > > > > > > > >> > >
> > > > > > > > > > > > >> > > Radai: #1 Request processing time rather than
> > > > request
> > > > > > rate
> > > > > > > > > were
> > > > > > > > > > > > chosen
> > > > > > > > > > > > >> > > because the time per request can vary
> > > significantly
> > > > > > > between
> > > > > > > > > > > requests
> > > > > > > > > > > > >> as
> > > > > > > > > > > > >> > > mentioned in the discussion and KIP.
> > > > > > > > > > > > >> > > #2 Two separate quotas for heartbeats/regular
> > > > requests
> > > > > > > feel
> > > > > > > > > like
> > > > > > > > > > > > more
> > > > > > > > > > > > >> > > configuration and more metrics. Since most
> users
> > > > would
> > > > > > set
> > > > > > > > > > quotas
> > > > > > > > > > > > >> higher
> > > > > > > > > > > > >> > > than the expected usage and quotas are more
> of a
> > > > > safety
> > > > > > > > net, a
> > > > > > > > > > > > single
> > > > > > > > > > > > >> > quota
> > > > > > > > > > > > >> > > should work in most cases.
> > > > > > > > > > > > >> > >  #3 The number of requests in purgatory is
> > limited
> > > > by
> > > > > > the
> > > > > > > > > number
> > > > > > > > > > > of
> > > > > > > > > > > > >> > active
> > > > > > > > > > > > >> > > connections since only one request per
> > connection
> > > > will
> > > > > > be
> > > > > > > > > > > throttled
> > > > > > > > > > > > >> at a
> > > > > > > > > > > > >> > > time.
> > > > > > > > > > > > >> > > #4 As with byte rate quotas, to use the full
> > > > allocated
> > > > > > > > quotas,
> > > > > > > > > > > > >> > > clients/users would need to use partitions
> that
> > > are
> > > > > > > > > distributed
> > > > > > > > > > > > across
> > > > > > > > > > > > >> > the
> > > > > > > > > > > > >> > > cluster. The alternative of using cluster-wide
> > > > quotas
> > > > > > > > instead
> > > > > > > > > of
> > > > > > > > > > > > >> > per-broker
> > > > > > > > > > > > >> > > quotas would be far too complex to implement.
> > > > > > > > > > > > >> > >
> > > > > > > > > > > > >> > > Dong : We currently have two
> ClientQuotaManagers
> > > for
> > > > > > quota
> > > > > > > > > types
> > > > > > > > > > > > Fetch
> > > > > > > > > > > > >> > and
> > > > > > > > > > > > >> > > Produce. A new one will be added for IOThread,
> > > which
> > > > > > > manages
> > > > > > > > > > > quotas
> > > > > > > > > > > > >> for
> > > > > > > > > > > > >> > I/O
> > > > > > > > > > > > >> > > thread utilization. This will not update the
> > Fetch
> > > > or
> > > > > > > > Produce
> > > > > > > > > > > > >> queue-size,
> > > > > > > > > > > > >> > > but will have a separate metric for the
> > > > queue-size.  I
> > > > > > > > wasn't
> > > > > > > > > > > > >> planning to
> > > > > > > > > > > > >> > > add any additional metrics apart from the
> > > equivalent
> > > > > > ones
> > > > > > > > for
> > > > > > > > > > > > existing
> > > > > > > > > > > > >> > > quotas as part of this KIP. Ratio of byte-rate
> > to
> > > > I/O
> > > > > > > thread
> > > > > > > > > > > > >> utilization
> > > > > > > > > > > > >> > > could be slightly misleading since it depends
> on
> > > the
> > > > > > > > sequence
> > > > > > > > > of
> > > > > > > > > > > > >> > requests.
> > > > > > > > > > > > >> > > But we can look into more metrics after the
> KIP
> > is
> > > > > > > > implemented
> > > > > > > > > > if
> > > > > > > > > > > > >> > required.
> > > > > > > > > > > > >> > >
> > > > > > > > > > > > >> > > I think we need to limit the maximum delay
> since
> > > all
> > > > > > > > requests
> > > > > > > > > > are
> > > > > > > > > > > > >> > > throttled. If a client has a quota of 0.001
> > units
> > > > and
> > > > > a
> > > > > > > > single
> > > > > > > > > > > > request
> > > > > > > > > > > > >> > used
> > > > > > > > > > > > >> > > 50ms, we don't want to delay all requests from
> > the
> > > > > > client
> > > > > > > by
> > > > > > > > > 50
> > > > > > > > > > > > >> seconds,
> > > > > > > > > > > > >> > > throwing the client out of all its consumer
> > > groups.
> > > > > The
> > > > > > > > issue
> > > > > > > > > is
> > > > > > > > > > > > only
> > > > > > > > > > > > >> if
> > > > > > > > > > > > >> > a
> > > > > > > > > > > > >> > > user is allocated a quota that is insufficient
> > to
> > > > > > process
> > > > > > > > one
> > > > > > > > > > > large
> > > > > > > > > > > > >> > > request. The expectation is that the units
> > > allocated
> > > > > per
> > > > > > > > user
> > > > > > > > > > will
> > > > > > > > > > > > be
> > > > > > > > > > > > >> > much
> > > > > > > > > > > > >> > > higher than the time taken to process one
> > request
> > > > and
> > > > > > the
> > > > > > > > > limit
> > > > > > > > > > > > should
> > > > > > > > > > > > >> > > seldom be applied. Agree this needs proper
> > > > > > documentation.
> > > > > > > > > > > > >> > >
> > > > > > > > > > > > >> > > Regards,
> > > > > > > > > > > > >> > >
> > > > > > > > > > > > >> > > Rajini
> > > > > > > > > > > > >> > >
> > > > > > > > > > > > >> > >
> > > > > > > > > > > > >> > > On Thu, Feb 23, 2017 at 8:04 PM, radai <
> > > > > > > > > > > radai.rosenbl...@gmail.com>
> > > > > > > > > > > > >> > wrote:
> > > > > > > > > > > > >> > >
> > > > > > > > > > > > >> > >> @jun: i wasnt concerned about tying up a
> > request
> > > > > > > processing
> > > > > > > > > > > thread,
> > > > > > > > > > > > >> but
> > > > > > > > > > > > >> > >> IIUC the code does still read the entire
> > request
> > > > out,
> > > > > > > which
> > > > > > > > > > might
> > > > > > > > > > > > >> add-up
> > > > > > > > > > > > >> > >> to
> > > > > > > > > > > > >> > >> a non-negligible amount of memory.
> > > > > > > > > > > > >> > >>
> > > > > > > > > > > > >> > >> On Thu, Feb 23, 2017 at 11:55 AM, Dong Lin <
> > > > > > > > > > lindon...@gmail.com>
> > > > > > > > > > > > >> wrote:
> > > > > > > > > > > > >> > >>
> > > > > > > > > > > > >> > >> > Hey Rajini,
> > > > > > > > > > > > >> > >> >
> > > > > > > > > > > > >> > >> > The current KIP says that the maximum delay
> > > will
> > > > be
> > > > > > > > reduced
> > > > > > > > > > to
> > > > > > > > > > > > >> window
> > > > > > > > > > > > >> > >> size
> > > > > > > > > > > > >> > >> > if it is larger than the window size. I
> have
> > a
> > > > > > concern
> > > > > > > > with
> > > > > > > > > > > this:
> > > > > > > > > > > > >> > >> >
> > > > > > > > > > > > >> > >> > 1) This essentially means that the user is
> > > > allowed
> > > > > to
> > > > > > > > > exceed
> > > > > > > > > > > > their
> > > > > > > > > > > > >> > quota
> > > > > > > > > > > > >> > >> > over a long period of time. Can you provide
> > an
> > > > > upper
> > > > > > > > bound
> > > > > > > > > on
> > > > > > > > > > > > this
> > > > > > > > > > > > >> > >> > deviation?
> > > > > > > > > > > > >> > >> >
> > > > > > > > > > > > >> > >> > 2) What is the motivation for cap the
> maximum
> > > > delay
> > > > > > by
> > > > > > > > the
> > > > > > > > > > > window
> > > > > > > > > > > > >> > size?
> > > > > > > > > > > > >> > >> I
> > > > > > > > > > > > >> > >> > am wondering if there is better alternative
> > to
> > > > > > address
> > > > > > > > the
> > > > > > > > > > > > problem.
> > > > > > > > > > > > >> > >> >
> > > > > > > > > > > > >> > >> > 3) It means that the existing
> metric-related
> > > > config
> > > > > > > will
> > > > > > > > > > have a
> > > > > > > > > > > > >> more
> > > > > > > > > > > > >> > >> > directly impact on the mechanism of this
> > > > > > > > > io-thread-unit-based
> > > > > > > > > > > > >> quota.
> > > > > > > > > > > > >> > The
> > > > > > > > > > > > >> > >> > may be an important change depending on the
> > > > answer
> > > > > to
> > > > > > > 1)
> > > > > > > > > > above.
> > > > > > > > > > > > We
> > > > > > > > > > > > >> > >> probably
> > > > > > > > > > > > >> > >> > need to document this more explicitly.
> > > > > > > > > > > > >> > >> >
> > > > > > > > > > > > >> > >> > Dong
> > > > > > > > > > > > >> > >> >
> > > > > > > > > > > > >> > >> >
> > > > > > > > > > > > >> > >> > On Thu, Feb 23, 2017 at 10:56 AM, Dong Lin
> <
> > > > > > > > > > > lindon...@gmail.com>
> > > > > > > > > > > > >> > wrote:
> > > > > > > > > > > > >> > >> >
> > > > > > > > > > > > >> > >> > > Hey Jun,
> > > > > > > > > > > > >> > >> > >
> > > > > > > > > > > > >> > >> > > Yeah you are right. I thought it wasn't
> > > because
> > > > > at
> > > > > > > > > LinkedIn
> > > > > > > > > > > it
> > > > > > > > > > > > >> will
> > > > > > > > > > > > >> > be
> > > > > > > > > > > > >> > >> > too
> > > > > > > > > > > > >> > >> > > much pressure on inGraph to expose those
> > > > > > per-clientId
> > > > > > > > > > metrics
> > > > > > > > > > > > so
> > > > > > > > > > > > >> we
> > > > > > > > > > > > >> > >> ended
> > > > > > > > > > > > >> > >> > > up printing them periodically to local
> log.
> > > > Never
> > > > > > > mind
> > > > > > > > if
> > > > > > > > > > it
> > > > > > > > > > > is
> > > > > > > > > > > > >> not
> > > > > > > > > > > > >> > a
> > > > > > > > > > > > >> > >> > > general problem.
> > > > > > > > > > > > >> > >> > >
> > > > > > > > > > > > >> > >> > > Hey Rajini,
> > > > > > > > > > > > >> > >> > >
> > > > > > > > > > > > >> > >> > > - I agree with Jay that we probably don't
> > > want
> > > > to
> > > > > > > add a
> > > > > > > > > new
> > > > > > > > > > > > field
> > > > > > > > > > > > >> > for
> > > > > > > > > > > > >> > >> > > every quota ProduceResponse or
> > FetchResponse.
> > > > Is
> > > > > > > there
> > > > > > > > > any
> > > > > > > > > > > > >> use-case
> > > > > > > > > > > > >> > >> for
> > > > > > > > > > > > >> > >> > > having separate throttle-time fields for
> > > > > > > > byte-rate-quota
> > > > > > > > > > and
> > > > > > > > > > > > >> > >> > > io-thread-unit-quota? You probably need
> to
> > > > > document
> > > > > > > > this
> > > > > > > > > as
> > > > > > > > > > > > >> > interface
> > > > > > > > > > > > >> > >> > > change if you plan to add new field in
> any
> > > > > request.
> > > > > > > > > > > > >> > >> > >
> > > > > > > > > > > > >> > >> > > - I don't think IOThread belongs to
> > > quotaType.
> > > > > The
> > > > > > > > > existing
> > > > > > > > > > > > quota
> > > > > > > > > > > > >> > >> types
> > > > > > > > > > > > >> > >> > > (i.e. Produce/Fetch/LeaderReplicatio
> > > > > > > > > n/FollowerReplication)
> > > > > > > > > > > > >> identify
> > > > > > > > > > > > >> > >> the
> > > > > > > > > > > > >> > >> > > type of request that are throttled, not
> the
> > > > quota
> > > > > > > > > mechanism
> > > > > > > > > > > > that
> > > > > > > > > > > > >> is
> > > > > > > > > > > > >> > >> > applied.
> > > > > > > > > > > > >> > >> > >
> > > > > > > > > > > > >> > >> > > - If a request is throttled due to this
> > > > > > > > > > io-thread-unit-based
> > > > > > > > > > > > >> quota,
> > > > > > > > > > > > >> > is
> > > > > > > > > > > > >> > >> > the
> > > > > > > > > > > > >> > >> > > existing queue-size metric in
> > > > ClientQuotaManager
> > > > > > > > > > incremented?
> > > > > > > > > > > > >> > >> > >
> > > > > > > > > > > > >> > >> > > - In the interest of providing guide line
> > for
> > > > > admin
> > > > > > > to
> > > > > > > > > > decide
> > > > > > > > > > > > >> > >> > > io-thread-unit-based quota and for user
> to
> > > > > > understand
> > > > > > > > its
> > > > > > > > > > > > impact
> > > > > > > > > > > > >> on
> > > > > > > > > > > > >> > >> their
> > > > > > > > > > > > >> > >> > > traffic, would it be useful to have a
> > metric
> > > > that
> > > > > > > shows
> > > > > > > > > the
> > > > > > > > > > > > >> overall
> > > > > > > > > > > > >> > >> > > byte-rate per io-thread-unit? Can we also
> > > show
> > > > > > this a
> > > > > > > > > > > > >> per-clientId
> > > > > > > > > > > > >> > >> > metric?
> > > > > > > > > > > > >> > >> > >
> > > > > > > > > > > > >> > >> > > Thanks,
> > > > > > > > > > > > >> > >> > > Dong
> > > > > > > > > > > > >> > >> > >
> > > > > > > > > > > > >> > >> > >
> > > > > > > > > > > > >> > >> > > On Thu, Feb 23, 2017 at 9:25 AM, Jun Rao
> <
> > > > > > > > > j...@confluent.io
> > > > > > > > > > >
> > > > > > > > > > > > >> wrote:
> > > > > > > > > > > > >> > >> > >
> > > > > > > > > > > > >> > >> > >> Hi, Ismael,
> > > > > > > > > > > > >> > >> > >>
> > > > > > > > > > > > >> > >> > >> For #3, typically, an admin won't
> > configure
> > > > more
> > > > > > io
> > > > > > > > > > threads
> > > > > > > > > > > > than
> > > > > > > > > > > > >> > CPU
> > > > > > > > > > > > >> > >> > >> cores,
> > > > > > > > > > > > >> > >> > >> but it's possible for an admin to start
> > with
> > > > > fewer
> > > > > > > io
> > > > > > > > > > > threads
> > > > > > > > > > > > >> than
> > > > > > > > > > > > >> > >> cores
> > > > > > > > > > > > >> > >> > >> and grow that later on.
> > > > > > > > > > > > >> > >> > >>
> > > > > > > > > > > > >> > >> > >> Hi, Dong,
> > > > > > > > > > > > >> > >> > >>
> > > > > > > > > > > > >> > >> > >> I think the throttleTime sensor on the
> > > broker
> > > > > > tells
> > > > > > > > the
> > > > > > > > > > > admin
> > > > > > > > > > > > >> > >> whether a
> > > > > > > > > > > > >> > >> > >> user/clentId is throttled or not.
> > > > > > > > > > > > >> > >> > >>
> > > > > > > > > > > > >> > >> > >> Hi, Radi,
> > > > > > > > > > > > >> > >> > >>
> > > > > > > > > > > > >> > >> > >> The reasoning for delaying the throttled
> > > > > requests
> > > > > > on
> > > > > > > > the
> > > > > > > > > > > > broker
> > > > > > > > > > > > >> > >> instead
> > > > > > > > > > > > >> > >> > of
> > > > > > > > > > > > >> > >> > >> returning an error immediately is that
> the
> > > > > latter
> > > > > > > has
> > > > > > > > no
> > > > > > > > > > way
> > > > > > > > > > > > to
> > > > > > > > > > > > >> > >> prevent
> > > > > > > > > > > > >> > >> > >> the
> > > > > > > > > > > > >> > >> > >> client from retrying immediately, which
> > will
> > > > > make
> > > > > > > > things
> > > > > > > > > > > > worse.
> > > > > > > > > > > > >> The
> > > > > > > > > > > > >> > >> > >> delaying logic is based off a delay
> > queue. A
> > > > > > > separate
> > > > > > > > > > > > expiration
> > > > > > > > > > > > >> > >> thread
> > > > > > > > > > > > >> > >> > >> just waits on the next to be expired
> > > request.
> > > > > So,
> > > > > > it
> > > > > > > > > > doesn't
> > > > > > > > > > > > tie
> > > > > > > > > > > > >> > up a
> > > > > > > > > > > > >> > >> > >> request handler thread.
> > > > > > > > > > > > >> > >> > >>
> > > > > > > > > > > > >> > >> > >> Thanks,
> > > > > > > > > > > > >> > >> > >>
> > > > > > > > > > > > >> > >> > >> Jun
> > > > > > > > > > > > >> > >> > >>
> > > > > > > > > > > > >> > >> > >> On Thu, Feb 23, 2017 at 9:07 AM, Ismael
> > > Juma <
> > > > > > > > > > > > ism...@juma.me.uk
> > > > > > > > > > > > >> >
> > > > > > > > > > > > >> > >> wrote:
> > > > > > > > > > > > >> > >> > >>
> > > > > > > > > > > > >> > >> > >> > Hi Jay,
> > > > > > > > > > > > >> > >> > >> >
> > > > > > > > > > > > >> > >> > >> > Regarding 1, I definitely like the
> > > > simplicity
> > > > > of
> > > > > > > > > > keeping a
> > > > > > > > > > > > >> single
> > > > > > > > > > > > >> > >> > >> throttle
> > > > > > > > > > > > >> > >> > >> > time field in the response. The
> downside
> > > is
> > > > > that
> > > > > > > the
> > > > > > > > > > > client
> > > > > > > > > > > > >> > metrics
> > > > > > > > > > > > >> > >> > >> will be
> > > > > > > > > > > > >> > >> > >> > more coarse grained.
> > > > > > > > > > > > >> > >> > >> >
> > > > > > > > > > > > >> > >> > >> > Regarding 3, we have
> > > > > > `leader.imbalance.per.broker.
> > > > > > > > > > > > percentage`
> > > > > > > > > > > > >> > and
> > > > > > > > > > > > >> > >> > >> > `log.cleaner.min.cleanable.ratio`.
> > > > > > > > > > > > >> > >> > >> >
> > > > > > > > > > > > >> > >> > >> > Ismael
> > > > > > > > > > > > >> > >> > >> >
> > > > > > > > > > > > >> > >> > >> > On Thu, Feb 23, 2017 at 4:43 PM, Jay
> > > Kreps <
> > > > > > > > > > > > j...@confluent.io>
> > > > > > > > > > > > >> > >> wrote:
> > > > > > > > > > > > >> > >> > >> >
> > > > > > > > > > > > >> > >> > >> > > A few minor comments:
> > > > > > > > > > > > >> > >> > >> > >
> > > > > > > > > > > > >> > >> > >> > >    1. Isn't it the case that the
> > > > throttling
> > > > > > time
> > > > > > > > > > > response
> > > > > > > > > > > > >> field
> > > > > > > > > > > > >> > >> > should
> > > > > > > > > > > > >> > >> > >> > have
> > > > > > > > > > > > >> > >> > >> > >    the total time your request was
> > > > throttled
> > > > > > > > > > > irrespective
> > > > > > > > > > > > of
> > > > > > > > > > > > >> > the
> > > > > > > > > > > > >> > >> > >> quotas
> > > > > > > > > > > > >> > >> > >> > > that
> > > > > > > > > > > > >> > >> > >> > >    caused that. Limiting it to byte
> > rate
> > > > > quota
> > > > > > > > > doesn't
> > > > > > > > > > > > make
> > > > > > > > > > > > >> > >> sense,
> > > > > > > > > > > > >> > >> > >> but I
> > > > > > > > > > > > >> > >> > >> > > also
> > > > > > > > > > > > >> > >> > >> > >    I don't think we want to end up
> > > adding
> > > > > new
> > > > > > > > fields
> > > > > > > > > > in
> > > > > > > > > > > > the
> > > > > > > > > > > > >> > >> response
> > > > > > > > > > > > >> > >> > >> for
> > > > > > > > > > > > >> > >> > >> > > every
> > > > > > > > > > > > >> > >> > >> > >    single thing we quota, right?
> > > > > > > > > > > > >> > >> > >> > >    2. I don't think we should make
> > this
> > > > > quota
> > > > > > > > > > > specifically
> > > > > > > > > > > > >> > about
> > > > > > > > > > > > >> > >> io
> > > > > > > > > > > > >> > >> > >> > >    threads. Once we introduce these
> > > quotas
> > > > > > > people
> > > > > > > > > set
> > > > > > > > > > > them
> > > > > > > > > > > > >> and
> > > > > > > > > > > > >> > >> > expect
> > > > > > > > > > > > >> > >> > >> > them
> > > > > > > > > > > > >> > >> > >> > > to
> > > > > > > > > > > > >> > >> > >> > >    be enforced (and if they aren't
> it
> > > may
> > > > > > cause
> > > > > > > an
> > > > > > > > > > > > outage).
> > > > > > > > > > > > >> As
> > > > > > > > > > > > >> > a
> > > > > > > > > > > > >> > >> > >> result
> > > > > > > > > > > > >> > >> > >> > > they
> > > > > > > > > > > > >> > >> > >> > >    are a bit more sensitive than
> > normal
> > > > > > > configs, I
> > > > > > > > > > > think.
> > > > > > > > > > > > >> The
> > > > > > > > > > > > >> > >> > current
> > > > > > > > > > > > >> > >> > >> > > thread
> > > > > > > > > > > > >> > >> > >> > >    pools seem like something of an
> > > > > > > implementation
> > > > > > > > > > detail
> > > > > > > > > > > > and
> > > > > > > > > > > > >> > not
> > > > > > > > > > > > >> > >> the
> > > > > > > > > > > > >> > >> > >> > level
> > > > > > > > > > > > >> > >> > >> > > the
> > > > > > > > > > > > >> > >> > >> > >    user-facing quotas should be
> > involved
> > > > > > with. I
> > > > > > > > > think
> > > > > > > > > > > it
> > > > > > > > > > > > >> might
> > > > > > > > > > > > >> > >> be
> > > > > > > > > > > > >> > >> > >> better
> > > > > > > > > > > > >> > >> > >> > > to
> > > > > > > > > > > > >> > >> > >> > >    make this a general request-time
> > > > throttle
> > > > > > > with
> > > > > > > > no
> > > > > > > > > > > > >> mention in
> > > > > > > > > > > > >> > >> the
> > > > > > > > > > > > >> > >> > >> > naming
> > > > > > > > > > > > >> > >> > >> > >    about I/O threads and simply
> > > > acknowledge
> > > > > > the
> > > > > > > > > > current
> > > > > > > > > > > > >> > >> limitation
> > > > > > > > > > > > >> > >> > >> (which
> > > > > > > > > > > > >> > >> > >> > > we
> > > > > > > > > > > > >> > >> > >> > >    may someday fix) in the docs that
> > > this
> > > > > > covers
> > > > > > > > > only
> > > > > > > > > > > the
> > > > > > > > > > > > >> time
> > > > > > > > > > > > >> > >> after
> > > > > > > > > > > > >> > >> > >> the
> > > > > > > > > > > > >> > >> > >> > >    thread is read off the network.
> > > > > > > > > > > > >> > >> > >> > >    3. As such I think the right
> > > interface
> > > > to
> > > > > > the
> > > > > > > > > user
> > > > > > > > > > > > would
> > > > > > > > > > > > >> be
> > > > > > > > > > > > >> > >> > >> something
> > > > > > > > > > > > >> > >> > >> > >    like percent_request_time and be
> in
> > > > > > > {0,...100}
> > > > > > > > or
> > > > > > > > > > > > >> > >> > >> request_time_ratio
> > > > > > > > > > > > >> > >> > >> > > and be
> > > > > > > > > > > > >> > >> > >> > >    in {0.0,...,1.0} (I think "ratio"
> > is
> > > > the
> > > > > > > > > > terminology
> > > > > > > > > > > we
> > > > > > > > > > > > >> used
> > > > > > > > > > > > >> > >> if
> > > > > > > > > > > > >> > >> > the
> > > > > > > > > > > > >> > >> > >> > > scale
> > > > > > > > > > > > >> > >> > >> > >    is between 0 and 1 in the other
> > > > metrics,
> > > > > > > > right?)
> > > > > > > > > > > > >> > >> > >> > >
> > > > > > > > > > > > >> > >> > >> > > -Jay
> > > > > > > > > > > > >> > >> > >> > >
> > > > > > > > > > > > >> > >> > >> > > On Thu, Feb 23, 2017 at 3:45 AM,
> > Rajini
> > > > > > Sivaram
> > > > > > > <
> > > > > > > > > > > > >> > >> > >> rajinisiva...@gmail.com
> > > > > > > > > > > > >> > >> > >> > >
> > > > > > > > > > > > >> > >> > >> > > wrote:
> > > > > > > > > > > > >> > >> > >> > >
> > > > > > > > > > > > >> > >> > >> > > > Guozhang/Dong,
> > > > > > > > > > > > >> > >> > >> > > >
> > > > > > > > > > > > >> > >> > >> > > > Thank you for the feedback.
> > > > > > > > > > > > >> > >> > >> > > >
> > > > > > > > > > > > >> > >> > >> > > > Guozhang : I have updated the
> > section
> > > on
> > > > > > > > > > co-existence
> > > > > > > > > > > of
> > > > > > > > > > > > >> byte
> > > > > > > > > > > > >> > >> rate
> > > > > > > > > > > > >> > >> > >> and
> > > > > > > > > > > > >> > >> > >> > > > request time quotas.
> > > > > > > > > > > > >> > >> > >> > > >
> > > > > > > > > > > > >> > >> > >> > > > Dong: I hadn't added much detail
> to
> > > the
> > > > > > > metrics
> > > > > > > > > and
> > > > > > > > > > > > >> sensors
> > > > > > > > > > > > >> > >> since
> > > > > > > > > > > > >> > >> > >> they
> > > > > > > > > > > > >> > >> > >> > > are
> > > > > > > > > > > > >> > >> > >> > > > going to be very similar to the
> > > existing
> > > > > > > metrics
> > > > > > > > > and
> > > > > > > > > > > > >> sensors.
> > > > > > > > > > > > >> > >> To
> > > > > > > > > > > > >> > >> > >> avoid
> > > > > > > > > > > > >> > >> > >> > > > confusion, I have now added more
> > > detail.
> > > > > All
> > > > > > > > > metrics
> > > > > > > > > > > are
> > > > > > > > > > > > >> in
> > > > > > > > > > > > >> > the
> > > > > > > > > > > > >> > >> > >> group
> > > > > > > > > > > > >> > >> > >> > > > "quotaType" and all sensors have
> > names
> > > > > > > starting
> > > > > > > > > with
> > > > > > > > > > > > >> > >> "quotaType"
> > > > > > > > > > > > >> > >> > >> (where
> > > > > > > > > > > > >> > >> > >> > > > quotaType is Produce/Fetch/
> > > > > > LeaderReplication/
> > > > > > > > > > > > >> > >> > >> > > > FollowerReplication/*IOThread*).
> > > > > > > > > > > > >> > >> > >> > > > So there will be no reuse of
> > existing
> > > > > > > > > > metrics/sensors.
> > > > > > > > > > > > The
> > > > > > > > > > > > >> > new
> > > > > > > > > > > > >> > >> > ones
> > > > > > > > > > > > >> > >> > >> for
> > > > > > > > > > > > >> > >> > >> > > > request processing time based
> > > throttling
> > > > > > will
> > > > > > > be
> > > > > > > > > > > > >> completely
> > > > > > > > > > > > >> > >> > >> independent
> > > > > > > > > > > > >> > >> > >> > > of
> > > > > > > > > > > > >> > >> > >> > > > existing metrics/sensors, but will
> > be
> > > > > > > consistent
> > > > > > > > > in
> > > > > > > > > > > > >> format.
> > > > > > > > > > > > >> > >> > >> > > >
> > > > > > > > > > > > >> > >> > >> > > > The existing throttle_time_ms
> field
> > in
> > > > > > > > > produce/fetch
> > > > > > > > > > > > >> > responses
> > > > > > > > > > > > >> > >> > will
> > > > > > > > > > > > >> > >> > >> not
> > > > > > > > > > > > >> > >> > >> > > be
> > > > > > > > > > > > >> > >> > >> > > > impacted by this KIP. That will
> > > continue
> > > > > to
> > > > > > > > return
> > > > > > > > > > > > >> byte-rate
> > > > > > > > > > > > >> > >> based
> > > > > > > > > > > > >> > >> > >> > > > throttling times. In addition, a
> new
> > > > field
> > > > > > > > > > > > >> > >> > request_throttle_time_ms
> > > > > > > > > > > > >> > >> > >> > will
> > > > > > > > > > > > >> > >> > >> > > be
> > > > > > > > > > > > >> > >> > >> > > > added to return request quota
> based
> > > > > > throttling
> > > > > > > > > > times.
> > > > > > > > > > > > >> These
> > > > > > > > > > > > >> > >> will
> > > > > > > > > > > > >> > >> > be
> > > > > > > > > > > > >> > >> > >> > > exposed
> > > > > > > > > > > > >> > >> > >> > > > as new metrics on the client-side.
> > > > > > > > > > > > >> > >> > >> > > >
> > > > > > > > > > > > >> > >> > >> > > > Since all metrics and sensors are
> > > > > different
> > > > > > > for
> > > > > > > > > each
> > > > > > > > > > > > type
> > > > > > > > > > > > >> of
> > > > > > > > > > > > >> > >> > quota,
> > > > > > > > > > > > >> > >> > >> I
> > > > > > > > > > > > >> > >> > >> > > > believe there is already
> sufficient
> > > > > metrics
> > > > > > to
> > > > > > > > > > monitor
> > > > > > > > > > > > >> > >> throttling
> > > > > > > > > > > > >> > >> > on
> > > > > > > > > > > > >> > >> > >> > both
> > > > > > > > > > > > >> > >> > >> > > > client and broker side for each
> type
> > > of
> > > > > > > > > throttling.
> > > > > > > > > > > > >> > >> > >> > > >
> > > > > > > > > > > > >> > >> > >> > > > Regards,
> > > > > > > > > > > > >> > >> > >> > > >
> > > > > > > > > > > > >> > >> > >> > > > Rajini
> > > > > > > > > > > > >> > >> > >> > > >
> > > > > > > > > > > > >> > >> > >> > > >
> > > > > > > > > > > > >> > >> > >> > > > On Thu, Feb 23, 2017 at 4:32 AM,
> > Dong
> > > > Lin
> > > > > <
> > > > > > > > > > > > >> > lindon...@gmail.com
> > > > > > > > > > > > >> > >> >
> > > > > > > > > > > > >> > >> > >> wrote:
> > > > > > > > > > > > >> > >> > >> > > >
> > > > > > > > > > > > >> > >> > >> > > > > Hey Rajini,
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >> > >> > >> > > > > I think it makes a lot of sense
> to
> > > use
> > > > > > > > > > > io_thread_units
> > > > > > > > > > > > >> as
> > > > > > > > > > > > >> > >> metric
> > > > > > > > > > > > >> > >> > >> to
> > > > > > > > > > > > >> > >> > >> > > quota
> > > > > > > > > > > > >> > >> > >> > > > > user's traffic here. LGTM
> > overall. I
> > > > > have
> > > > > > > some
> > > > > > > > > > > > questions
> > > > > > > > > > > > >> > >> > regarding
> > > > > > > > > > > > >> > >> > >> > > > sensors.
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >> > >> > >> > > > > - Can you be more specific in
> the
> > > KIP
> > > > > what
> > > > > > > > > sensors
> > > > > > > > > > > > will
> > > > > > > > > > > > >> be
> > > > > > > > > > > > >> > >> > added?
> > > > > > > > > > > > >> > >> > >> For
> > > > > > > > > > > > >> > >> > >> > > > > example, it will be useful to
> > > specify
> > > > > the
> > > > > > > name
> > > > > > > > > and
> > > > > > > > > > > > >> > >> attributes of
> > > > > > > > > > > > >> > >> > >> > these
> > > > > > > > > > > > >> > >> > >> > > > new
> > > > > > > > > > > > >> > >> > >> > > > > sensors.
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >> > >> > >> > > > > - We currently have
> throttle-time
> > > and
> > > > > > > > queue-size
> > > > > > > > > > for
> > > > > > > > > > > > >> > >> byte-rate
> > > > > > > > > > > > >> > >> > >> based
> > > > > > > > > > > > >> > >> > >> > > > quota.
> > > > > > > > > > > > >> > >> > >> > > > > Are you going to have separate
> > > > > > throttle-time
> > > > > > > > and
> > > > > > > > > > > > >> queue-size
> > > > > > > > > > > > >> > >> for
> > > > > > > > > > > > >> > >> > >> > > requests
> > > > > > > > > > > > >> > >> > >> > > > > throttled by
> io_thread_unit-based
> > > > quota,
> > > > > > or
> > > > > > > > will
> > > > > > > > > > > they
> > > > > > > > > > > > >> share
> > > > > > > > > > > > >> > >> the
> > > > > > > > > > > > >> > >> > >> same
> > > > > > > > > > > > >> > >> > >> > > > > sensor?
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >> > >> > >> > > > > - Does the throttle-time in the
> > > > > > > > ProduceResponse
> > > > > > > > > > and
> > > > > > > > > > > > >> > >> > FetchResponse
> > > > > > > > > > > > >> > >> > >> > > > contains
> > > > > > > > > > > > >> > >> > >> > > > > time due to io_thread_unit-based
> > > > quota?
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >> > >> > >> > > > > - Currently kafka server doesn't
> > not
> > > > > > provide
> > > > > > > > any
> > > > > > > > > > log
> > > > > > > > > > > > or
> > > > > > > > > > > > >> > >> metrics
> > > > > > > > > > > > >> > >> > >> that
> > > > > > > > > > > > >> > >> > >> > > > tells
> > > > > > > > > > > > >> > >> > >> > > > > whether any given clientId (or
> > user)
> > > > is
> > > > > > > > > throttled.
> > > > > > > > > > > > This
> > > > > > > > > > > > >> is
> > > > > > > > > > > > >> > >> not
> > > > > > > > > > > > >> > >> > too
> > > > > > > > > > > > >> > >> > >> > bad
> > > > > > > > > > > > >> > >> > >> > > > > because we can still check the
> > > > > client-side
> > > > > > > > > > byte-rate
> > > > > > > > > > > > >> metric
> > > > > > > > > > > > >> > >> to
> > > > > > > > > > > > >> > >> > >> > validate
> > > > > > > > > > > > >> > >> > >> > > > > whether a given client is
> > throttled.
> > > > But
> > > > > > > with
> > > > > > > > > this
> > > > > > > > > > > > >> > >> > io_thread_unit,
> > > > > > > > > > > > >> > >> > >> > > there
> > > > > > > > > > > > >> > >> > >> > > > > will be no way to validate
> > whether a
> > > > > given
> > > > > > > > > client
> > > > > > > > > > is
> > > > > > > > > > > > >> slow
> > > > > > > > > > > > >> > >> > because
> > > > > > > > > > > > >> > >> > >> it
> > > > > > > > > > > > >> > >> > >> > > has
> > > > > > > > > > > > >> > >> > >> > > > > exceeded its io_thread_unit
> limit.
> > > It
> > > > is
> > > > > > > > > necessary
> > > > > > > > > > > for
> > > > > > > > > > > > >> user
> > > > > > > > > > > > >> > >> to
> > > > > > > > > > > > >> > >> > be
> > > > > > > > > > > > >> > >> > >> > able
> > > > > > > > > > > > >> > >> > >> > > to
> > > > > > > > > > > > >> > >> > >> > > > > know this information to figure
> > how
> > > > > > whether
> > > > > > > > they
> > > > > > > > > > > have
> > > > > > > > > > > > >> > reached
> > > > > > > > > > > > >> > >> > >> there
> > > > > > > > > > > > >> > >> > >> > > quota
> > > > > > > > > > > > >> > >> > >> > > > > limit. How about we add log4j
> log
> > on
> > > > the
> > > > > > > > server
> > > > > > > > > > side
> > > > > > > > > > > > to
> > > > > > > > > > > > >> > >> > >> periodically
> > > > > > > > > > > > >> > >> > >> > > > print
> > > > > > > > > > > > >> > >> > >> > > > > the (client_id,
> > > > byte-rate-throttle-time,
> > > > > > > > > > > > >> > >> > >> > io-thread-unit-throttle-time)
> > > > > > > > > > > > >> > >> > >> > > so
> > > > > > > > > > > > >> > >> > >> > > > > that kafka administrator can
> > figure
> > > > > those
> > > > > > > > users
> > > > > > > > > > that
> > > > > > > > > > > > >> have
> > > > > > > > > > > > >> > >> > reached
> > > > > > > > > > > > >> > >> > >> > their
> > > > > > > > > > > > >> > >> > >> > > > > limit and act accordingly?
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >> > >> > >> > > > > Thanks,
> > > > > > > > > > > > >> > >> > >> > > > > Dong
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >> > >> > >> > > > > On Wed, Feb 22, 2017 at 4:46 PM,
> > > > > Guozhang
> > > > > > > > Wang <
> > > > > > > > > > > > >> > >> > >> wangg...@gmail.com>
> > > > > > > > > > > > >> > >> > >> > > > wrote:
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > Made a pass over the doc,
> > overall
> > > > LGTM
> > > > > > > > except
> > > > > > > > > a
> > > > > > > > > > > > minor
> > > > > > > > > > > > >> > >> comment
> > > > > > > > > > > > >> > >> > on
> > > > > > > > > > > > >> > >> > >> > the
> > > > > > > > > > > > >> > >> > >> > > > > > throttling implementation:
> > > > > > > > > > > > >> > >> > >> > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > Stated as "Request processing
> > time
> > > > > > > > throttling
> > > > > > > > > > will
> > > > > > > > > > > > be
> > > > > > > > > > > > >> > >> applied
> > > > > > > > > > > > >> > >> > on
> > > > > > > > > > > > >> > >> > >> > top
> > > > > > > > > > > > >> > >> > >> > > if
> > > > > > > > > > > > >> > >> > >> > > > > > necessary." I thought that it
> > > meant
> > > > > the
> > > > > > > > > request
> > > > > > > > > > > > >> > processing
> > > > > > > > > > > > >> > >> > time
> > > > > > > > > > > > >> > >> > >> > > > > throttling
> > > > > > > > > > > > >> > >> > >> > > > > > is applied first, but continue
> > > > > reading I
> > > > > > > > found
> > > > > > > > > > it
> > > > > > > > > > > > >> > actually
> > > > > > > > > > > > >> > >> > >> meant to
> > > > > > > > > > > > >> > >> > >> > > > apply
> > > > > > > > > > > > >> > >> > >> > > > > > produce / fetch byte rate
> > > throttling
> > > > > > > first.
> > > > > > > > > > > > >> > >> > >> > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > Also the last sentence "The
> > > > remaining
> > > > > > > delay
> > > > > > > > if
> > > > > > > > > > any
> > > > > > > > > > > > is
> > > > > > > > > > > > >> > >> applied
> > > > > > > > > > > > >> > >> > to
> > > > > > > > > > > > >> > >> > >> > the
> > > > > > > > > > > > >> > >> > >> > > > > > response." is a bit confusing
> to
> > > me.
> > > > > > Maybe
> > > > > > > > > > > rewording
> > > > > > > > > > > > >> it a
> > > > > > > > > > > > >> > >> bit?
> > > > > > > > > > > > >> > >> > >> > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > Guozhang
> > > > > > > > > > > > >> > >> > >> > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > On Wed, Feb 22, 2017 at 3:24
> PM,
> > > Jun
> > > > > > Rao <
> > > > > > > > > > > > >> > j...@confluent.io
> > > > > > > > > > > > >> > >> >
> > > > > > > > > > > > >> > >> > >> wrote:
> > > > > > > > > > > > >> > >> > >> > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > Hi, Rajini,
> > > > > > > > > > > > >> > >> > >> > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > Thanks for the updated KIP.
> > The
> > > > > latest
> > > > > > > > > > proposal
> > > > > > > > > > > > >> looks
> > > > > > > > > > > > >> > >> good
> > > > > > > > > > > > >> > >> > to
> > > > > > > > > > > > >> > >> > >> me.
> > > > > > > > > > > > >> > >> > >> > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > Jun
> > > > > > > > > > > > >> > >> > >> > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > On Wed, Feb 22, 2017 at 2:19
> > PM,
> > > > > > Rajini
> > > > > > > > > > Sivaram
> > > > > > > > > > > <
> > > > > > > > > > > > >> > >> > >> > > > > rajinisiva...@gmail.com
> > > > > > > > > > > > >> > >> > >> > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > wrote:
> > > > > > > > > > > > >> > >> > >> > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > Jun/Roger,
> > > > > > > > > > > > >> > >> > >> > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > Thank you for the
> feedback.
> > > > > > > > > > > > >> > >> > >> > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > 1. I have updated the KIP
> to
> > > use
> > > > > > > > absolute
> > > > > > > > > > > units
> > > > > > > > > > > > >> > >> instead of
> > > > > > > > > > > > >> > >> > >> > > > > percentage.
> > > > > > > > > > > > >> > >> > >> > > > > > > The
> > > > > > > > > > > > >> > >> > >> > > > > > > > property is called*
> > > > > io_thread_units*
> > > > > > > to
> > > > > > > > > > align
> > > > > > > > > > > > with
> > > > > > > > > > > > >> > the
> > > > > > > > > > > > >> > >> > >> thread
> > > > > > > > > > > > >> > >> > >> > > count
> > > > > > > > > > > > >> > >> > >> > > > > > > > property *num.io.threads*.
> > > When
> > > > we
> > > > > > > > > implement
> > > > > > > > > > > > >> network
> > > > > > > > > > > > >> > >> > thread
> > > > > > > > > > > > >> > >> > >> > > > > utilization
> > > > > > > > > > > > >> > >> > >> > > > > > > > quotas, we can add another
> > > > > property
> > > > > > > > > > > > >> > >> > *network_thread_units.*
> > > > > > > > > > > > >> > >> > >> > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > 2. ControlledShutdown is
> > > already
> > > > > > > listed
> > > > > > > > > > under
> > > > > > > > > > > > the
> > > > > > > > > > > > >> > >> exempt
> > > > > > > > > > > > >> > >> > >> > > requests.
> > > > > > > > > > > > >> > >> > >> > > > > Jun,
> > > > > > > > > > > > >> > >> > >> > > > > > > did
> > > > > > > > > > > > >> > >> > >> > > > > > > > you mean a different
> request
> > > > that
> > > > > > > needs
> > > > > > > > to
> > > > > > > > > > be
> > > > > > > > > > > > >> added?
> > > > > > > > > > > > >> > >> The
> > > > > > > > > > > > >> > >> > >> four
> > > > > > > > > > > > >> > >> > >> > > > > requests
> > > > > > > > > > > > >> > >> > >> > > > > > > > currently exempt in the
> KIP
> > > are
> > > > > > > > > StopReplica,
> > > > > > > > > > > > >> > >> > >> > ControlledShutdown,
> > > > > > > > > > > > >> > >> > >> > > > > > > > LeaderAndIsr and
> > > UpdateMetadata.
> > > > > > These
> > > > > > > > are
> > > > > > > > > > > > >> controlled
> > > > > > > > > > > > >> > >> > using
> > > > > > > > > > > > >> > >> > >> > > > > > ClusterAction
> > > > > > > > > > > > >> > >> > >> > > > > > > > ACL, so it is easy to
> > exclude
> > > > and
> > > > > > only
> > > > > > > > > > > throttle
> > > > > > > > > > > > if
> > > > > > > > > > > > >> > >> > >> > unauthorized.
> > > > > > > > > > > > >> > >> > >> > > I
> > > > > > > > > > > > >> > >> > >> > > > > > wasn't
> > > > > > > > > > > > >> > >> > >> > > > > > > > sure if there are other
> > > requests
> > > > > > used
> > > > > > > > only
> > > > > > > > > > for
> > > > > > > > > > > > >> > >> > inter-broker
> > > > > > > > > > > > >> > >> > >> > that
> > > > > > > > > > > > >> > >> > >> > > > > needed
> > > > > > > > > > > > >> > >> > >> > > > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > be excluded.
> > > > > > > > > > > > >> > >> > >> > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > 3. I was thinking the
> > smallest
> > > > > > change
> > > > > > > > > would
> > > > > > > > > > be
> > > > > > > > > > > > to
> > > > > > > > > > > > >> > >> replace
> > > > > > > > > > > > >> > >> > >> all
> > > > > > > > > > > > >> > >> > >> > > > > > references
> > > > > > > > > > > > >> > >> > >> > > > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > >
> > *requestChannel.sendResponse()
> > > *
> > > > > > with
> > > > > > > a
> > > > > > > > > > local
> > > > > > > > > > > > >> method
> > > > > > > > > > > > >> > >> > >> > > > > > > >
> > *sendResponseMaybeThrottle()*
> > > > that
> > > > > > > does
> > > > > > > > > the
> > > > > > > > > > > > >> > throttling
> > > > > > > > > > > > >> > >> if
> > > > > > > > > > > > >> > >> > >> any
> > > > > > > > > > > > >> > >> > >> > > plus
> > > > > > > > > > > > >> > >> > >> > > > > send
> > > > > > > > > > > > >> > >> > >> > > > > > > > response. If we throttle
> > first
> > > > in
> > > > > > > > > > > > >> > *KafkaApis.handle()*,
> > > > > > > > > > > > >> > >> > the
> > > > > > > > > > > > >> > >> > >> > time
> > > > > > > > > > > > >> > >> > >> > > > > spent
> > > > > > > > > > > > >> > >> > >> > > > > > > > within the method handling
> > the
> > > > > > request
> > > > > > > > > will
> > > > > > > > > > > not
> > > > > > > > > > > > be
> > > > > > > > > > > > >> > >> > recorded
> > > > > > > > > > > > >> > >> > >> or
> > > > > > > > > > > > >> > >> > >> > > used
> > > > > > > > > > > > >> > >> > >> > > > > in
> > > > > > > > > > > > >> > >> > >> > > > > > > > throttling. We can look
> into
> > > > this
> > > > > > > again
> > > > > > > > > when
> > > > > > > > > > > the
> > > > > > > > > > > > >> PR
> > > > > > > > > > > > >> > is
> > > > > > > > > > > > >> > >> > ready
> > > > > > > > > > > > >> > >> > >> > for
> > > > > > > > > > > > >> > >> > >> > > > > > review.
> > > > > > > > > > > > >> > >> > >> > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > Regards,
> > > > > > > > > > > > >> > >> > >> > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > Rajini
> > > > > > > > > > > > >> > >> > >> > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > On Wed, Feb 22, 2017 at
> 5:55
> > > PM,
> > > > > > Roger
> > > > > > > > > > Hoover
> > > > > > > > > > > <
> > > > > > > > > > > > >> > >> > >> > > > > roger.hoo...@gmail.com>
> > > > > > > > > > > > >> > >> > >> > > > > > > > wrote:
> > > > > > > > > > > > >> > >> > >> > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > Great to see this KIP
> and
> > > the
> > > > > > > > excellent
> > > > > > > > > > > > >> discussion.
> > > > > > > > > > > > >> > >> > >> > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > To me, Jun's suggestion
> > > makes
> > > > > > sense.
> > > > > > > > If
> > > > > > > > > > my
> > > > > > > > > > > > >> > >> application
> > > > > > > > > > > > >> > >> > is
> > > > > > > > > > > > >> > >> > >> > > > > allocated
> > > > > > > > > > > > >> > >> > >> > > > > > 1
> > > > > > > > > > > > >> > >> > >> > > > > > > > > request handler unit,
> then
> > > > it's
> > > > > as
> > > > > > > if
> > > > > > > > I
> > > > > > > > > > > have a
> > > > > > > > > > > > >> > Kafka
> > > > > > > > > > > > >> > >> > >> broker
> > > > > > > > > > > > >> > >> > >> > > with
> > > > > > > > > > > > >> > >> > >> > > > a
> > > > > > > > > > > > >> > >> > >> > > > > > > single
> > > > > > > > > > > > >> > >> > >> > > > > > > > > request handler thread
> > > > dedicated
> > > > > > to
> > > > > > > > me.
> > > > > > > > > > > > That's
> > > > > > > > > > > > >> the
> > > > > > > > > > > > >> > >> > most I
> > > > > > > > > > > > >> > >> > >> > can
> > > > > > > > > > > > >> > >> > >> > > > use,
> > > > > > > > > > > > >> > >> > >> > > > > > at
> > > > > > > > > > > > >> > >> > >> > > > > > > > > least.  That allocation
> > > > doesn't
> > > > > > > change
> > > > > > > > > > even
> > > > > > > > > > > if
> > > > > > > > > > > > >> an
> > > > > > > > > > > > >> > >> admin
> > > > > > > > > > > > >> > >> > >> later
> > > > > > > > > > > > >> > >> > >> > > > > > increases
> > > > > > > > > > > > >> > >> > >> > > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > size of the request
> thread
> > > > pool
> > > > > on
> > > > > > > the
> > > > > > > > > > > broker.
> > > > > > > > > > > > >> > It's
> > > > > > > > > > > > >> > >> > >> similar
> > > > > > > > > > > > >> > >> > >> > to
> > > > > > > > > > > > >> > >> > >> > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > CPU
> > > > > > > > > > > > >> > >> > >> > > > > > > > > abstraction that VMs and
> > > > > > containers
> > > > > > > > get
> > > > > > > > > > from
> > > > > > > > > > > > >> > >> hypervisors
> > > > > > > > > > > > >> > >> > >> or
> > > > > > > > > > > > >> > >> > >> > OS
> > > > > > > > > > > > >> > >> > >> > > > > > > > schedulers.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > While different client
> > > access
> > > > > > > patterns
> > > > > > > > > can
> > > > > > > > > > > use
> > > > > > > > > > > > >> > wildly
> > > > > > > > > > > > >> > >> > >> > different
> > > > > > > > > > > > >> > >> > >> > > > > > amounts
> > > > > > > > > > > > >> > >> > >> > > > > > > > of
> > > > > > > > > > > > >> > >> > >> > > > > > > > > request thread resources
> > per
> > > > > > > request,
> > > > > > > > a
> > > > > > > > > > > given
> > > > > > > > > > > > >> > >> > application
> > > > > > > > > > > > >> > >> > >> > will
> > > > > > > > > > > > >> > >> > >> > > > > > > generally
> > > > > > > > > > > > >> > >> > >> > > > > > > > > have a stable access
> > pattern
> > > > and
> > > > > > can
> > > > > > > > > > figure
> > > > > > > > > > > > out
> > > > > > > > > > > > >> > >> > >> empirically
> > > > > > > > > > > > >> > >> > >> > how
> > > > > > > > > > > > >> > >> > >> > > > > many
> > > > > > > > > > > > >> > >> > >> > > > > > > > > "request thread units"
> it
> > > > needs
> > > > > to
> > > > > > > > meet
> > > > > > > > > > it's
> > > > > > > > > > > > >> > >> > >> > throughput/latency
> > > > > > > > > > > > >> > >> > >> > > > > > goals.
> > > > > > > > > > > > >> > >> > >> > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > Cheers,
> > > > > > > > > > > > >> > >> > >> > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > Roger
> > > > > > > > > > > > >> > >> > >> > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > On Wed, Feb 22, 2017 at
> > 8:53
> > > > AM,
> > > > > > Jun
> > > > > > > > > Rao <
> > > > > > > > > > > > >> > >> > >> j...@confluent.io>
> > > > > > > > > > > > >> > >> > >> > > > wrote:
> > > > > > > > > > > > >> > >> > >> > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > Hi, Rajini,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > Thanks for the updated
> > > KIP.
> > > > A
> > > > > > few
> > > > > > > > more
> > > > > > > > > > > > >> comments.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > 1. A concern of
> > > > > > > request_time_percent
> > > > > > > > > is
> > > > > > > > > > > that
> > > > > > > > > > > > >> it's
> > > > > > > > > > > > >> > >> not
> > > > > > > > > > > > >> > >> > an
> > > > > > > > > > > > >> > >> > >> > > > absolute
> > > > > > > > > > > > >> > >> > >> > > > > > > > value.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > Let's say you give a
> > user
> > > a
> > > > > 10%
> > > > > > > > limit.
> > > > > > > > > > If
> > > > > > > > > > > > the
> > > > > > > > > > > > >> > admin
> > > > > > > > > > > > >> > >> > >> doubles
> > > > > > > > > > > > >> > >> > >> > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > number
> > > > > > > > > > > > >> > >> > >> > > > > > > > of
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > request handler
> threads,
> > > > that
> > > > > > user
> > > > > > > > now
> > > > > > > > > > > > >> actually
> > > > > > > > > > > > >> > has
> > > > > > > > > > > > >> > >> > >> twice
> > > > > > > > > > > > >> > >> > >> > the
> > > > > > > > > > > > >> > >> > >> > > > > > > absolute
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > capacity. This may
> > confuse
> > > > > > people
> > > > > > > a
> > > > > > > > > bit.
> > > > > > > > > > > So,
> > > > > > > > > > > > >> > >> perhaps
> > > > > > > > > > > > >> > >> > >> > setting
> > > > > > > > > > > > >> > >> > >> > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > quota
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > based on an absolute
> > > request
> > > > > > > thread
> > > > > > > > > unit
> > > > > > > > > > > is
> > > > > > > > > > > > >> > better.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > 2.
> > > ControlledShutdownRequest
> > > > > is
> > > > > > > also
> > > > > > > > > an
> > > > > > > > > > > > >> > >> inter-broker
> > > > > > > > > > > > >> > >> > >> > request
> > > > > > > > > > > > >> > >> > >> > > > and
> > > > > > > > > > > > >> > >> > >> > > > > > > needs
> > > > > > > > > > > > >> > >> > >> > > > > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > be excluded from
> > > throttling.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > 3. Implementation
> wise,
> > I
> > > am
> > > > > > > > wondering
> > > > > > > > > > if
> > > > > > > > > > > > it's
> > > > > > > > > > > > >> > >> simpler
> > > > > > > > > > > > >> > >> > >> to
> > > > > > > > > > > > >> > >> > >> > > apply
> > > > > > > > > > > > >> > >> > >> > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > request
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > time throttling first
> in
> > > > > > > > > > > KafkaApis.handle().
> > > > > > > > > > > > >> > >> > Otherwise,
> > > > > > > > > > > > >> > >> > >> we
> > > > > > > > > > > > >> > >> > >> > > will
> > > > > > > > > > > > >> > >> > >> > > > > > need
> > > > > > > > > > > > >> > >> > >> > > > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > add
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > the throttling logic
> in
> > > each
> > > > > > type
> > > > > > > of
> > > > > > > > > > > > request.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > Thanks,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > Jun
> > > > > > > > > > > > >> > >> > >> > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > On Wed, Feb 22, 2017
> at
> > > 5:58
> > > > > AM,
> > > > > > > > > Rajini
> > > > > > > > > > > > >> Sivaram <
> > > > > > > > > > > > >> > >> > >> > > > > > > > rajinisiva...@gmail.com
> > > > > > > > > > > > >> > >> > >> > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > wrote:
> > > > > > > > > > > > >> > >> > >> > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > Jun,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > Thank you for the
> > > review.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > I have reverted to
> the
> > > > > > original
> > > > > > > > KIP
> > > > > > > > > > that
> > > > > > > > > > > > >> > >> throttles
> > > > > > > > > > > > >> > >> > >> based
> > > > > > > > > > > > >> > >> > >> > on
> > > > > > > > > > > > >> > >> > >> > > > > > request
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > handler
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > utilization. At the
> > > > moment,
> > > > > it
> > > > > > > > uses
> > > > > > > > > > > > >> percentage,
> > > > > > > > > > > > >> > >> but
> > > > > > > > > > > > >> > >> > I
> > > > > > > > > > > > >> > >> > >> am
> > > > > > > > > > > > >> > >> > >> > > > happy
> > > > > > > > > > > > >> > >> > >> > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > change
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > a fraction (out of 1
> > > > instead
> > > > > > of
> > > > > > > > 100)
> > > > > > > > > > if
> > > > > > > > > > > > >> > >> required. I
> > > > > > > > > > > > >> > >> > >> have
> > > > > > > > > > > > >> > >> > >> > > > added
> > > > > > > > > > > > >> > >> > >> > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > examples
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > from this discussion
> > to
> > > > the
> > > > > > KIP.
> > > > > > > > > Also
> > > > > > > > > > > > added
> > > > > > > > > > > > >> a
> > > > > > > > > > > > >> > >> > "Future
> > > > > > > > > > > > >> > >> > >> > Work"
> > > > > > > > > > > > >> > >> > >> > > > > > section
> > > > > > > > > > > > >> > >> > >> > > > > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > address network
> thread
> > > > > > > > utilization.
> > > > > > > > > > The
> > > > > > > > > > > > >> > >> > configuration
> > > > > > > > > > > > >> > >> > >> is
> > > > > > > > > > > > >> > >> > >> > > > named
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > >
> "request_time_percent"
> > > > with
> > > > > > the
> > > > > > > > > > > > expectation
> > > > > > > > > > > > >> > that
> > > > > > > > > > > > >> > >> it
> > > > > > > > > > > > >> > >> > >> can
> > > > > > > > > > > > >> > >> > >> > > also
> > > > > > > > > > > > >> > >> > >> > > > be
> > > > > > > > > > > > >> > >> > >> > > > > > > used
> > > > > > > > > > > > >> > >> > >> > > > > > > > as
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > limit for network
> > thread
> > > > > > > > utilization
> > > > > > > > > > > when
> > > > > > > > > > > > >> that
> > > > > > > > > > > > >> > is
> > > > > > > > > > > > >> > >> > >> > > > implemented,
> > > > > > > > > > > > >> > >> > >> > > > > so
> > > > > > > > > > > > >> > >> > >> > > > > > > > that
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > users have to set
> only
> > > one
> > > > > > > config
> > > > > > > > > for
> > > > > > > > > > > the
> > > > > > > > > > > > >> two
> > > > > > > > > > > > >> > and
> > > > > > > > > > > > >> > >> > not
> > > > > > > > > > > > >> > >> > >> > have
> > > > > > > > > > > > >> > >> > >> > > to
> > > > > > > > > > > > >> > >> > >> > > > > > worry
> > > > > > > > > > > > >> > >> > >> > > > > > > > > about
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > the internal
> > > distribution
> > > > of
> > > > > > the
> > > > > > > > > work
> > > > > > > > > > > > >> between
> > > > > > > > > > > > >> > the
> > > > > > > > > > > > >> > >> > two
> > > > > > > > > > > > >> > >> > >> > > thread
> > > > > > > > > > > > >> > >> > >> > > > > > pools
> > > > > > > > > > > > >> > >> > >> > > > > > > in
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > Kafka.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > Regards,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > Rajini
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > On Wed, Feb 22, 2017
> > at
> > > > > 12:23
> > > > > > > AM,
> > > > > > > > > Jun
> > > > > > > > > > > Rao
> > > > > > > > > > > > <
> > > > > > > > > > > > >> > >> > >> > > j...@confluent.io>
> > > > > > > > > > > > >> > >> > >> > > > > > > wrote:
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > Hi, Rajini,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > Thanks for the
> > > proposal.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > The benefit of
> using
> > > the
> > > > > > > request
> > > > > > > > > > > > >> processing
> > > > > > > > > > > > >> > >> time
> > > > > > > > > > > > >> > >> > >> over
> > > > > > > > > > > > >> > >> > >> > the
> > > > > > > > > > > > >> > >> > >> > > > > > request
> > > > > > > > > > > > >> > >> > >> > > > > > > > > rate
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > is
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > exactly what
> people
> > > have
> > > > > > > said. I
> > > > > > > > > > will
> > > > > > > > > > > > just
> > > > > > > > > > > > >> > >> expand
> > > > > > > > > > > > >> > >> > >> that
> > > > > > > > > > > > >> > >> > >> > a
> > > > > > > > > > > > >> > >> > >> > > > bit.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > Consider
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > following case.
> The
> > > > > producer
> > > > > > > > > sends a
> > > > > > > > > > > > >> produce
> > > > > > > > > > > > >> > >> > request
> > > > > > > > > > > > >> > >> > >> > > with a
> > > > > > > > > > > > >> > >> > >> > > > > > 10MB
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > message
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > but compressed to
> > > 100KB
> > > > > with
> > > > > > > > gzip.
> > > > > > > > > > The
> > > > > > > > > > > > >> > >> > >> decompression of
> > > > > > > > > > > > >> > >> > >> > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > message
> > > > > > > > > > > > >> > >> > >> > > > > > > > > on
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > broker could take
> > > 10-15
> > > > > > > seconds,
> > > > > > > > > > > during
> > > > > > > > > > > > >> which
> > > > > > > > > > > > >> > >> > time,
> > > > > > > > > > > > >> > >> > >> a
> > > > > > > > > > > > >> > >> > >> > > > request
> > > > > > > > > > > > >> > >> > >> > > > > > > > handler
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > thread is
> completely
> > > > > > blocked.
> > > > > > > In
> > > > > > > > > > this
> > > > > > > > > > > > >> case,
> > > > > > > > > > > > >> > >> > neither
> > > > > > > > > > > > >> > >> > >> the
> > > > > > > > > > > > >> > >> > >> > > > > byte-in
> > > > > > > > > > > > >> > >> > >> > > > > > > > quota
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > nor
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > the request rate
> > quota
> > > > may
> > > > > > be
> > > > > > > > > > > effective
> > > > > > > > > > > > in
> > > > > > > > > > > > >> > >> > >> protecting
> > > > > > > > > > > > >> > >> > >> > the
> > > > > > > > > > > > >> > >> > >> > > > > > broker.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > Consider
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > another case. A
> > > consumer
> > > > > > group
> > > > > > > > > > starts
> > > > > > > > > > > > >> with 10
> > > > > > > > > > > > >> > >> > >> instances
> > > > > > > > > > > > >> > >> > >> > > and
> > > > > > > > > > > > >> > >> > >> > > > > > later
> > > > > > > > > > > > >> > >> > >> > > > > > > > on
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > switches to 20
> > > > instances.
> > > > > > The
> > > > > > > > > > request
> > > > > > > > > > > > rate
> > > > > > > > > > > > >> > will
> > > > > > > > > > > > >> > >> > >> likely
> > > > > > > > > > > > >> > >> > >> > > > > double,
> > > > > > > > > > > > >> > >> > >> > > > > > > but
> > > > > > > > > > > > >> > >> > >> > > > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > actually load on
> the
> > > > > broker
> > > > > > > may
> > > > > > > > > not
> > > > > > > > > > > > double
> > > > > > > > > > > > >> > >> since
> > > > > > > > > > > > >> > >> > >> each
> > > > > > > > > > > > >> > >> > >> > > fetch
> > > > > > > > > > > > >> > >> > >> > > > > > > request
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > only
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > contains half of
> the
> > > > > > > partitions.
> > > > > > > > > > > Request
> > > > > > > > > > > > >> rate
> > > > > > > > > > > > >> > >> > quota
> > > > > > > > > > > > >> > >> > >> may
> > > > > > > > > > > > >> > >> > >> > > not
> > > > > > > > > > > > >> > >> > >> > > > > be
> > > > > > > > > > > > >> > >> > >> > > > > > > easy
> > > > > > > > > > > > >> > >> > >> > > > > > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > configure in this
> > > case.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > What we really
> want
> > is
> > > > to
> > > > > be
> > > > > > > > able
> > > > > > > > > to
> > > > > > > > > > > > >> prevent
> > > > > > > > > > > > >> > a
> > > > > > > > > > > > >> > >> > >> client
> > > > > > > > > > > > >> > >> > >> > > from
> > > > > > > > > > > > >> > >> > >> > > > > > using
> > > > > > > > > > > > >> > >> > >> > > > > > > > too
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > much
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > of the server side
> > > > > > resources.
> > > > > > > In
> > > > > > > > > > this
> > > > > > > > > > > > >> > >> particular
> > > > > > > > > > > > >> > >> > >> KIP,
> > > > > > > > > > > > >> > >> > >> > > this
> > > > > > > > > > > > >> > >> > >> > > > > > > resource
> > > > > > > > > > > > >> > >> > >> > > > > > > > > is
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > capacity of the
> > > request
> > > > > > > handler
> > > > > > > > > > > > threads. I
> > > > > > > > > > > > >> > >> agree
> > > > > > > > > > > > >> > >> > >> that
> > > > > > > > > > > > >> > >> > >> > it
> > > > > > > > > > > > >> > >> > >> > > > may
> > > > > > > > > > > > >> > >> > >> > > > > > not
> > > > > > > > > > > > >> > >> > >> > > > > > > be
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > intuitive for the
> > > users
> > > > to
> > > > > > > > > determine
> > > > > > > > > > > how
> > > > > > > > > > > > >> to
> > > > > > > > > > > > >> > set
> > > > > > > > > > > > >> > >> > the
> > > > > > > > > > > > >> > >> > >> > right
> > > > > > > > > > > > >> > >> > >> > > > > > limit.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > However,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > this is not
> > completely
> > > > new
> > > > > > and
> > > > > > > > has
> > > > > > > > > > > been
> > > > > > > > > > > > >> done
> > > > > > > > > > > > >> > in
> > > > > > > > > > > > >> > >> > the
> > > > > > > > > > > > >> > >> > >> > > > container
> > > > > > > > > > > > >> > >> > >> > > > > > > world
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > already. For
> > example,
> > > > > Linux
> > > > > > > > > cgroup (
> > > > > > > > > > > > >> > >> > >> > > > > https://access.redhat.com/
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > documentation/en-US/Red_Hat_En
> > > > > > > > > > > > >> > >> > >> terprise_Linux/6/html/
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > Resource_Management_Guide/sec-
> > > > > > > > > > > cpu.html)
> > > > > > > > > > > > >> has
> > > > > > > > > > > > >> > >> the
> > > > > > > > > > > > >> > >> > >> > concept
> > > > > > > > > > > > >> > >> > >> > > of
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > cpu.cfs_quota_us,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > which specifies
> the
> > > > total
> > > > > > > amount
> > > > > > > > > of
> > > > > > > > > > > time
> > > > > > > > > > > > >> in
> > > > > > > > > > > > >> > >> > >> > microseconds
> > > > > > > > > > > > >> > >> > >> > > > for
> > > > > > > > > > > > >> > >> > >> > > > > > > which
> > > > > > > > > > > > >> > >> > >> > > > > > > > > all
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > tasks in a cgroup
> > can
> > > > run
> > > > > > > > during a
> > > > > > > > > > one
> > > > > > > > > > > > >> second
> > > > > > > > > > > > >> > >> > >> period.
> > > > > > > > > > > > >> > >> > >> > We
> > > > > > > > > > > > >> > >> > >> > > > can
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > potentially
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > model the request
> > > > handler
> > > > > > > > threads
> > > > > > > > > > in a
> > > > > > > > > > > > >> > similar
> > > > > > > > > > > > >> > >> > way.
> > > > > > > > > > > > >> > >> > >> For
> > > > > > > > > > > > >> > >> > >> > > > > > example,
> > > > > > > > > > > > >> > >> > >> > > > > > > > each
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > request handler
> > thread
> > > > can
> > > > > > be
> > > > > > > 1
> > > > > > > > > > > request
> > > > > > > > > > > > >> > handler
> > > > > > > > > > > > >> > >> > unit
> > > > > > > > > > > > >> > >> > >> > and
> > > > > > > > > > > > >> > >> > >> > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > admin
> > > > > > > > > > > > >> > >> > >> > > > > > > > > can
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > configure a limit
> on
> > > how
> > > > > > many
> > > > > > > > > units
> > > > > > > > > > > (say
> > > > > > > > > > > > >> > 0.01)
> > > > > > > > > > > > >> > >> a
> > > > > > > > > > > > >> > >> > >> client
> > > > > > > > > > > > >> > >> > >> > > can
> > > > > > > > > > > > >> > >> > >> > > > > > have.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > Regarding not
> > > throttling
> > > > > the
> > > > > > > > > > internal
> > > > > > > > > > > > >> broker
> > > > > > > > > > > > >> > to
> > > > > > > > > > > > >> > >> > >> broker
> > > > > > > > > > > > >> > >> > >> > > > > > requests.
> > > > > > > > > > > > >> > >> > >> > > > > > > We
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > could
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > do that.
> > > Alternatively,
> > > > we
> > > > > > > could
> > > > > > > > > > just
> > > > > > > > > > > > let
> > > > > > > > > > > > >> the
> > > > > > > > > > > > >> > >> > admin
> > > > > > > > > > > > >> > >> > >> > > > > configure a
> > > > > > > > > > > > >> > >> > >> > > > > > > > high
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > limit
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > for the kafka user
> > (it
> > > > may
> > > > > > not
> > > > > > > > be
> > > > > > > > > > able
> > > > > > > > > > > > to
> > > > > > > > > > > > >> do
> > > > > > > > > > > > >> > >> that
> > > > > > > > > > > > >> > >> > >> > easily
> > > > > > > > > > > > >> > >> > >> > > > > based
> > > > > > > > > > > > >> > >> > >> > > > > > on
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > clientId
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > though).
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > Ideally we want to
> > be
> > > > able
> > > > > > to
> > > > > > > > > > protect
> > > > > > > > > > > > the
> > > > > > > > > > > > >> > >> > >> utilization
> > > > > > > > > > > > >> > >> > >> > of
> > > > > > > > > > > > >> > >> > >> > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > network
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > thread
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > pool too. The
> > > difficult
> > > > is
> > > > > > > > mostly
> > > > > > > > > > what
> > > > > > > > > > > > >> Rajini
> > > > > > > > > > > > >> > >> > said:
> > > > > > > > > > > > >> > >> > >> (1)
> > > > > > > > > > > > >> > >> > >> > > The
> > > > > > > > > > > > >> > >> > >> > > > > > > > mechanism
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > for
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > throttling the
> > > requests
> > > > is
> > > > > > > > through
> > > > > > > > > > > > >> Purgatory
> > > > > > > > > > > > >> > >> and
> > > > > > > > > > > > >> > >> > we
> > > > > > > > > > > > >> > >> > >> > will
> > > > > > > > > > > > >> > >> > >> > > > have
> > > > > > > > > > > > >> > >> > >> > > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > think
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > through how to
> > > integrate
> > > > > > that
> > > > > > > > into
> > > > > > > > > > the
> > > > > > > > > > > > >> > network
> > > > > > > > > > > > >> > >> > >> layer.
> > > > > > > > > > > > >> > >> > >> > > (2)
> > > > > > > > > > > > >> > >> > >> > > > In
> > > > > > > > > > > > >> > >> > >> > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > network
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > layer, currently
> we
> > > know
> > > > > the
> > > > > > > > user,
> > > > > > > > > > but
> > > > > > > > > > > > not
> > > > > > > > > > > > >> > the
> > > > > > > > > > > > >> > >> > >> clientId
> > > > > > > > > > > > >> > >> > >> > > of
> > > > > > > > > > > > >> > >> > >> > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > request.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > So,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > it's a bit tricky
> to
> > > > > > throttle
> > > > > > > > > based
> > > > > > > > > > on
> > > > > > > > > > > > >> > clientId
> > > > > > > > > > > > >> > >> > >> there.
> > > > > > > > > > > > >> > >> > >> > > > Plus,
> > > > > > > > > > > > >> > >> > >> > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > byteOut
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > quota can already
> > > > protect
> > > > > > the
> > > > > > > > > > network
> > > > > > > > > > > > >> thread
> > > > > > > > > > > > >> > >> > >> > utilization
> > > > > > > > > > > > >> > >> > >> > > > for
> > > > > > > > > > > > >> > >> > >> > > > > > > fetch
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > requests. So, if
> we
> > > > can't
> > > > > > > figure
> > > > > > > > > out
> > > > > > > > > > > > this
> > > > > > > > > > > > >> > part
> > > > > > > > > > > > >> > >> > right
> > > > > > > > > > > > >> > >> > >> > now,
> > > > > > > > > > > > >> > >> > >> > > > > just
> > > > > > > > > > > > >> > >> > >> > > > > > > > > focusing
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > on
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > the request
> handling
> > > > > threads
> > > > > > > for
> > > > > > > > > > this
> > > > > > > > > > > > KIP
> > > > > > > > > > > > >> is
> > > > > > > > > > > > >> > >> > still a
> > > > > > > > > > > > >> > >> > >> > > useful
> > > > > > > > > > > > >> > >> > >> > > > > > > > feature.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > Thanks,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > Jun
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > On Tue, Feb 21,
> 2017
> > > at
> > > > > 4:27
> > > > > > > AM,
> > > > > > > > > > > Rajini
> > > > > > > > > > > > >> > >> Sivaram <
> > > > > > > > > > > > >> > >> > >> > > > > > > > > >
> rajinisiva...@gmail.com
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > wrote:
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > Thank you all
> for
> > > the
> > > > > > > > feedback.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > Jay: I have
> > removed
> > > > > > > exemption
> > > > > > > > > for
> > > > > > > > > > > > >> consumer
> > > > > > > > > > > > >> > >> > >> heartbeat
> > > > > > > > > > > > >> > >> > >> > > etc.
> > > > > > > > > > > > >> > >> > >> > > > > > Agree
> > > > > > > > > > > > >> > >> > >> > > > > > > > > that
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > protecting the
> > > cluster
> > > > > is
> > > > > > > more
> > > > > > > > > > > > important
> > > > > > > > > > > > >> > than
> > > > > > > > > > > > >> > >> > >> > > protecting
> > > > > > > > > > > > >> > >> > >> > > > > > > > individual
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > apps.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > Have retained
> the
> > > > > > exemption
> > > > > > > > for
> > > > > > > > > > > > >> > >> > >> > > StopReplicat/LeaderAndIsr
> > > > > > > > > > > > >> > >> > >> > > > > > etc,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > these
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > are
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > throttled only
> if
> > > > > > > > authorization
> > > > > > > > > > > fails
> > > > > > > > > > > > >> (so
> > > > > > > > > > > > >> > >> can't
> > > > > > > > > > > > >> > >> > be
> > > > > > > > > > > > >> > >> > >> > used
> > > > > > > > > > > > >> > >> > >> > > > for
> > > > > > > > > > > > >> > >> > >> > > > > > DoS
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > attacks
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > in
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > a secure
> cluster,
> > > but
> > > > > > allows
> > > > > > > > > > > > >> inter-broker
> > > > > > > > > > > > >> > >> > >> requests to
> > > > > > > > > > > > >> > >> > >> > > > > > complete
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > without
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > delays).
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > I will wait
> > another
> > > > day
> > > > > to
> > > > > > > see
> > > > > > > > > if
> > > > > > > > > > > > these
> > > > > > > > > > > > >> is
> > > > > > > > > > > > >> > >> any
> > > > > > > > > > > > >> > >> > >> > > objection
> > > > > > > > > > > > >> > >> > >> > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > quotas
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > based
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > on
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > request
> processing
> > > > time
> > > > > > (as
> > > > > > > > > > opposed
> > > > > > > > > > > to
> > > > > > > > > > > > >> > >> request
> > > > > > > > > > > > >> > >> > >> rate)
> > > > > > > > > > > > >> > >> > >> > > and
> > > > > > > > > > > > >> > >> > >> > > > if
> > > > > > > > > > > > >> > >> > >> > > > > > > there
> > > > > > > > > > > > >> > >> > >> > > > > > > > > are
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > no
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > objections, I
> will
> > > > > revert
> > > > > > to
> > > > > > > > the
> > > > > > > > > > > > >> original
> > > > > > > > > > > > >> > >> > proposal
> > > > > > > > > > > > >> > >> > >> > with
> > > > > > > > > > > > >> > >> > >> > > > > some
> > > > > > > > > > > > >> > >> > >> > > > > > > > > changes.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > The original
> > > proposal
> > > > > was
> > > > > > > only
> > > > > > > > > > > > including
> > > > > > > > > > > > >> > the
> > > > > > > > > > > > >> > >> > time
> > > > > > > > > > > > >> > >> > >> > used
> > > > > > > > > > > > >> > >> > >> > > by
> > > > > > > > > > > > >> > >> > >> > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > request
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > handler threads
> > > (that
> > > > > made
> > > > > > > > > > > calculation
> > > > > > > > > > > > >> > >> easy). I
> > > > > > > > > > > > >> > >> > >> think
> > > > > > > > > > > > >> > >> > >> > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > suggestion
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > is
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > include the time
> > > spent
> > > > > in
> > > > > > > the
> > > > > > > > > > > network
> > > > > > > > > > > > >> > >> threads as
> > > > > > > > > > > > >> > >> > >> well
> > > > > > > > > > > > >> > >> > >> > > > since
> > > > > > > > > > > > >> > >> > >> > > > > > > that
> > > > > > > > > > > > >> > >> > >> > > > > > > > > may
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > be
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > significant. As
> > Jay
> > > > > > pointed
> > > > > > > > out,
> > > > > > > > > > it
> > > > > > > > > > > is
> > > > > > > > > > > > >> more
> > > > > > > > > > > > >> > >> > >> > complicated
> > > > > > > > > > > > >> > >> > >> > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > calculate
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > total available
> > CPU
> > > > time
> > > > > > and
> > > > > > > > > > convert
> > > > > > > > > > > > to
> > > > > > > > > > > > >> a
> > > > > > > > > > > > >> > >> ratio
> > > > > > > > > > > > >> > >> > >> when
> > > > > > > > > > > > >> > >> > >> > > > there
> > > > > > > > > > > > >> > >> > >> > > > > > *m*
> > > > > > > > > > > > >> > >> > >> > > > > > > > I/O
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > threads
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > and *n* network
> > > > threads.
> > > > > > > > > > > > >> > >> > >> > ThreadMXBean#getThreadCPUTime(
> > > > > > > > > > > > >> > >> > >> > > )
> > > > > > > > > > > > >> > >> > >> > > > > may
> > > > > > > > > > > > >> > >> > >> > > > > > > > give
> > > > > > > > > > > > >> > >> > >> > > > > > > > > us
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > what
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > we want, but it
> > can
> > > be
> > > > > > very
> > > > > > > > > > > expensive
> > > > > > > > > > > > on
> > > > > > > > > > > > >> > some
> > > > > > > > > > > > >> > >> > >> > > platforms.
> > > > > > > > > > > > >> > >> > >> > > > As
> > > > > > > > > > > > >> > >> > >> > > > > > > > Becket
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > and
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > Guozhang have
> > > pointed
> > > > > out,
> > > > > > > we
> > > > > > > > do
> > > > > > > > > > > have
> > > > > > > > > > > > >> > several
> > > > > > > > > > > > >> > >> > time
> > > > > > > > > > > > >> > >> > >> > > > > > measurements
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > already
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > for
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > generating
> metrics
> > > > that
> > > > > we
> > > > > > > > could
> > > > > > > > > > > use,
> > > > > > > > > > > > >> > though
> > > > > > > > > > > > >> > >> we
> > > > > > > > > > > > >> > >> > >> might
> > > > > > > > > > > > >> > >> > >> > > > want
> > > > > > > > > > > > >> > >> > >> > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > switch
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > nanoTime()
> instead
> > > of
> > > > > > > > > > > > >> currentTimeMillis()
> > > > > > > > > > > > >> > >> since
> > > > > > > > > > > > >> > >> > >> some
> > > > > > > > > > > > >> > >> > >> > of
> > > > > > > > > > > > >> > >> > >> > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > values
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > for
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > small requests
> may
> > > be
> > > > <
> > > > > > 1ms.
> > > > > > > > But
> > > > > > > > > > > > rather
> > > > > > > > > > > > >> > than
> > > > > > > > > > > > >> > >> add
> > > > > > > > > > > > >> > >> > >> up
> > > > > > > > > > > > >> > >> > >> > the
> > > > > > > > > > > > >> > >> > >> > > > > time
> > > > > > > > > > > > >> > >> > >> > > > > > > > spent
> > > > > > > > > > > > >> > >> > >> > > > > > > > > in
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > I/O
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > thread and
> network
> > > > > thread,
> > > > > > > > > > wouldn't
> > > > > > > > > > > it
> > > > > > > > > > > > >> be
> > > > > > > > > > > > >> > >> better
> > > > > > > > > > > > >> > >> > >> to
> > > > > > > > > > > > >> > >> > >> > > > convert
> > > > > > > > > > > > >> > >> > >> > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > time
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > spent
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > on each thread
> > into
> > > a
> > > > > > > separate
> > > > > > > > > > > ratio?
> > > > > > > > > > > > >> UserA
> > > > > > > > > > > > >> > >> has
> > > > > > > > > > > > >> > >> > a
> > > > > > > > > > > > >> > >> > >> > > request
> > > > > > > > > > > > >> > >> > >> > > > > > quota
> > > > > > > > > > > > >> > >> > >> > > > > > > > of
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > 5%.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > Can
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > we take that to
> > mean
> > > > > that
> > > > > > > > UserA
> > > > > > > > > > can
> > > > > > > > > > > > use
> > > > > > > > > > > > >> 5%
> > > > > > > > > > > > >> > of
> > > > > > > > > > > > >> > >> > the
> > > > > > > > > > > > >> > >> > >> > time
> > > > > > > > > > > > >> > >> > >> > > on
> > > > > > > > > > > > >> > >> > >> > > > > > > network
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > threads
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > and 5% of the
> time
> > > on
> > > > > I/O
> > > > > > > > > threads?
> > > > > > > > > > > If
> > > > > > > > > > > > >> > either
> > > > > > > > > > > > >> > >> is
> > > > > > > > > > > > >> > >> > >> > > exceeded,
> > > > > > > > > > > > >> > >> > >> > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > response
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > is
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > throttled - it
> > would
> > > > > mean
> > > > > > > > > > > maintaining
> > > > > > > > > > > > >> two
> > > > > > > > > > > > >> > >> sets
> > > > > > > > > > > > >> > >> > of
> > > > > > > > > > > > >> > >> > >> > > metrics
> > > > > > > > > > > > >> > >> > >> > > > > for
> > > > > > > > > > > > >> > >> > >> > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > two
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > durations, but
> > would
> > > > > > result
> > > > > > > in
> > > > > > > > > > more
> > > > > > > > > > > > >> > >> meaningful
> > > > > > > > > > > > >> > >> > >> > ratios.
> > > > > > > > > > > > >> > >> > >> > > We
> > > > > > > > > > > > >> > >> > >> > > > > > could
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > define
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > two
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > quota limits
> > (UserA
> > > > has
> > > > > 5%
> > > > > > > of
> > > > > > > > > > > request
> > > > > > > > > > > > >> > threads
> > > > > > > > > > > > >> > >> > and
> > > > > > > > > > > > >> > >> > >> 10%
> > > > > > > > > > > > >> > >> > >> > > of
> > > > > > > > > > > > >> > >> > >> > > > > > > network
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > threads),
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > but that seems
> > > > > unnecessary
> > > > > > > and
> > > > > > > > > > > harder
> > > > > > > > > > > > to
> > > > > > > > > > > > >> > >> explain
> > > > > > > > > > > > >> > >> > >> to
> > > > > > > > > > > > >> > >> > >> > > > users.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > Back to why and
> > how
> > > > > quotas
> > > > > > > are
> > > > > > > > > > > applied
> > > > > > > > > > > > >> to
> > > > > > > > > > > > >> > >> > network
> > > > > > > > > > > > >> > >> > >> > > thread
> > > > > > > > > > > > >> > >> > >> > > > > > > > > utilization:
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > a) In the case
> of
> > > > fetch,
> > > > > > > the
> > > > > > > > > time
> > > > > > > > > > > > >> spent in
> > > > > > > > > > > > >> > >> the
> > > > > > > > > > > > >> > >> > >> > network
> > > > > > > > > > > > >> > >> > >> > > > > > thread
> > > > > > > > > > > > >> > >> > >> > > > > > > > may
> > > > > > > > > > > > >> > >> > >> > > > > > > > > be
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > significant and
> I
> > > can
> > > > > see
> > > > > > > the
> > > > > > > > > need
> > > > > > > > > > > to
> > > > > > > > > > > > >> > include
> > > > > > > > > > > > >> > >> > >> this.
> > > > > > > > > > > > >> > >> > >> > Are
> > > > > > > > > > > > >> > >> > >> > > > > there
> > > > > > > > > > > > >> > >> > >> > > > > > > > other
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > requests where
> the
> > > > > network
> > > > > > > > > thread
> > > > > > > > > > > > >> > >> utilization is
> > > > > > > > > > > > >> > >> > >> > > > > significant?
> > > > > > > > > > > > >> > >> > >> > > > > > > In
> > > > > > > > > > > > >> > >> > >> > > > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > case
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > of fetch,
> request
> > > > > handler
> > > > > > > > thread
> > > > > > > > > > > > >> > utilization
> > > > > > > > > > > > >> > >> > would
> > > > > > > > > > > > >> > >> > >> > > > throttle
> > > > > > > > > > > > >> > >> > >> > > > > > > > clients
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > with
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > high request
> rate,
> > > low
> > > > > > data
> > > > > > > > > volume
> > > > > > > > > > > and
> > > > > > > > > > > > >> > fetch
> > > > > > > > > > > > >> > >> > byte
> > > > > > > > > > > > >> > >> > >> > rate
> > > > > > > > > > > > >> > >> > >> > > > > quota
> > > > > > > > > > > > >> > >> > >> > > > > > > will
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > throttle
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > clients with
> high
> > > data
> > > > > > > volume.
> > > > > > > > > > > Network
> > > > > > > > > > > > >> > thread
> > > > > > > > > > > > >> > >> > >> > > utilization
> > > > > > > > > > > > >> > >> > >> > > > > is
> > > > > > > > > > > > >> > >> > >> > > > > > > > > perhaps
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > proportional to
> > the
> > > > data
> > > > > > > > > volume. I
> > > > > > > > > > > am
> > > > > > > > > > > > >> > >> wondering
> > > > > > > > > > > > >> > >> > >> if we
> > > > > > > > > > > > >> > >> > >> > > > even
> > > > > > > > > > > > >> > >> > >> > > > > > need
> > > > > > > > > > > > >> > >> > >> > > > > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > throttle
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > based on network
> > > > thread
> > > > > > > > > > utilization
> > > > > > > > > > > or
> > > > > > > > > > > > >> > >> whether
> > > > > > > > > > > > >> > >> > the
> > > > > > > > > > > > >> > >> > >> > data
> > > > > > > > > > > > >> > >> > >> > > > > > volume
> > > > > > > > > > > > >> > >> > >> > > > > > > > > quota
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > covers
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > this case.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > b) At the
> moment,
> > we
> > > > > > record
> > > > > > > > and
> > > > > > > > > > > check
> > > > > > > > > > > > >> for
> > > > > > > > > > > > >> > >> quota
> > > > > > > > > > > > >> > >> > >> > > violation
> > > > > > > > > > > > >> > >> > >> > > > > at
> > > > > > > > > > > > >> > >> > >> > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > same
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > time.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > If a quota is
> > > > violated,
> > > > > > the
> > > > > > > > > > response
> > > > > > > > > > > > is
> > > > > > > > > > > > >> > >> delayed.
> > > > > > > > > > > > >> > >> > >> > Using
> > > > > > > > > > > > >> > >> > >> > > > > Jay'e
> > > > > > > > > > > > >> > >> > >> > > > > > > > > example
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > of
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > disk reads for
> > > fetches
> > > > > > > > happening
> > > > > > > > > > in
> > > > > > > > > > > > the
> > > > > > > > > > > > >> > >> network
> > > > > > > > > > > > >> > >> > >> > thread,
> > > > > > > > > > > > >> > >> > >> > > > We
> > > > > > > > > > > > >> > >> > >> > > > > > > can't
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > record
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > and
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > delay a response
> > > after
> > > > > the
> > > > > > > > disk
> > > > > > > > > > > reads.
> > > > > > > > > > > > >> We
> > > > > > > > > > > > >> > >> could
> > > > > > > > > > > > >> > >> > >> > record
> > > > > > > > > > > > >> > >> > >> > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > time
> > > > > > > > > > > > >> > >> > >> > > > > > > > > spent
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > on
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > the network
> thread
> > > > when
> > > > > > the
> > > > > > > > > > response
> > > > > > > > > > > > is
> > > > > > > > > > > > >> > >> complete
> > > > > > > > > > > > >> > >> > >> and
> > > > > > > > > > > > >> > >> > >> > > > > > introduce
> > > > > > > > > > > > >> > >> > >> > > > > > > a
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > delay
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > for
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > handling a
> > > subsequent
> > > > > > > request
> > > > > > > > > > > > (separate
> > > > > > > > > > > > >> out
> > > > > > > > > > > > >> > >> > >> recording
> > > > > > > > > > > > >> > >> > >> > > and
> > > > > > > > > > > > >> > >> > >> > > > > > quota
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > violation
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > handling in the
> > case
> > > > of
> > > > > > > > network
> > > > > > > > > > > thread
> > > > > > > > > > > > >> > >> > overload).
> > > > > > > > > > > > >> > >> > >> > Does
> > > > > > > > > > > > >> > >> > >> > > > that
> > > > > > > > > > > > >> > >> > >> > > > > > > make
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > sense?
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > Regards,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > Rajini
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > On Tue, Feb 21,
> > 2017
> > > > at
> > > > > > 2:58
> > > > > > > > AM,
> > > > > > > > > > > > Becket
> > > > > > > > > > > > >> > Qin <
> > > > > > > > > > > > >> > >> > >> > > > > > > > becket....@gmail.com>
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > wrote:
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > Hey Jay,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > Yeah, I agree
> > that
> > > > > > > enforcing
> > > > > > > > > the
> > > > > > > > > > > CPU
> > > > > > > > > > > > >> time
> > > > > > > > > > > > >> > >> is a
> > > > > > > > > > > > >> > >> > >> > little
> > > > > > > > > > > > >> > >> > >> > > > > > > tricky. I
> > > > > > > > > > > > >> > >> > >> > > > > > > > > am
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > thinking
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > that maybe we
> > can
> > > > use
> > > > > > the
> > > > > > > > > > existing
> > > > > > > > > > > > >> > request
> > > > > > > > > > > > >> > >> > >> > > statistics.
> > > > > > > > > > > > >> > >> > >> > > > > They
> > > > > > > > > > > > >> > >> > >> > > > > > > are
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > already
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > very detailed
> so
> > > we
> > > > > can
> > > > > > > > > probably
> > > > > > > > > > > see
> > > > > > > > > > > > >> the
> > > > > > > > > > > > >> > >> > >> > approximate
> > > > > > > > > > > > >> > >> > >> > > > CPU
> > > > > > > > > > > > >> > >> > >> > > > > > time
> > > > > > > > > > > > >> > >> > >> > > > > > > > > from
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > it,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > e.g.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > something like
> > > > > > > (total_time -
> > > > > > > > > > > > >> > >> > >> > > > request/response_queue_time
> > > > > > > > > > > > >> > >> > >> > > > > -
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > remote_time).
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > I agree with
> > > > Guozhang
> > > > > > that
> > > > > > > > > when
> > > > > > > > > > a
> > > > > > > > > > > > >> user is
> > > > > > > > > > > > >> > >> > >> throttled
> > > > > > > > > > > > >> > >> > >> > > it
> > > > > > > > > > > > >> > >> > >> > > > is
> > > > > > > > > > > > >> > >> > >> > > > > > > > likely
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > that
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > we
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > need to see if
> > > > > anything
> > > > > > > has
> > > > > > > > > went
> > > > > > > > > > > > wrong
> > > > > > > > > > > > >> > >> first,
> > > > > > > > > > > > >> > >> > >> and
> > > > > > > > > > > > >> > >> > >> > if
> > > > > > > > > > > > >> > >> > >> > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > users
> > > > > > > > > > > > >> > >> > >> > > > > > > > > are
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > well
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > behaving and
> > just
> > > > need
> > > > > > > more
> > > > > > > > > > > > >> resources, we
> > > > > > > > > > > > >> > >> will
> > > > > > > > > > > > >> > >> > >> have
> > > > > > > > > > > > >> > >> > >> > > to
> > > > > > > > > > > > >> > >> > >> > > > > bump
> > > > > > > > > > > > >> > >> > >> > > > > > > up
> > > > > > > > > > > > >> > >> > >> > > > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > quota
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > for them. It
> is
> > > true
> > > > > > that
> > > > > > > > > > > > >> pre-allocating
> > > > > > > > > > > > >> > >> CPU
> > > > > > > > > > > > >> > >> > >> time
> > > > > > > > > > > > >> > >> > >> > > quota
> > > > > > > > > > > > >> > >> > >> > > > > > > > precisely
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > for
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > users is
> > > difficult.
> > > > So
> > > > > > in
> > > > > > > > > > practice
> > > > > > > > > > > > it
> > > > > > > > > > > > >> > would
> > > > > > > > > > > > >> > >> > >> > probably
> > > > > > > > > > > > >> > >> > >> > > be
> > > > > > > > > > > > >> > >> > >> > > > > > more
> > > > > > > > > > > > >> > >> > >> > > > > > > > like
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > first
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > set
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > a relative
> high
> > > > > > protective
> > > > > > > > CPU
> > > > > > > > > > > time
> > > > > > > > > > > > >> quota
> > > > > > > > > > > > >> > >> for
> > > > > > > > > > > > >> > >> > >> > > everyone
> > > > > > > > > > > > >> > >> > >> > > > > and
> > > > > > > > > > > > >> > >> > >> > > > > > > > > increase
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > that
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > for some
> > > individual
> > > > > > > clients
> > > > > > > > on
> > > > > > > > > > > > demand.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > Jiangjie
> > (Becket)
> > > > Qin
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > On Mon, Feb
> 20,
> > > 2017
> > > > > at
> > > > > > > 5:48
> > > > > > > > > PM,
> > > > > > > > > > > > >> Guozhang
> > > > > > > > > > > > >> > >> > Wang <
> > > > > > > > > > > > >> > >> > >> > > > > > > > > wangg...@gmail.com
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > wrote:
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > This is a
> > great
> > > > > > > proposal,
> > > > > > > > > glad
> > > > > > > > > > > to
> > > > > > > > > > > > >> see
> > > > > > > > > > > > >> > it
> > > > > > > > > > > > >> > >> > >> > happening.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > I am
> inclined
> > to
> > > > the
> > > > > > CPU
> > > > > > > > > > > > >> throttling, or
> > > > > > > > > > > > >> > >> more
> > > > > > > > > > > > >> > >> > >> > > > > specifically
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > processing
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > time
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > ratio
> instead
> > of
> > > > the
> > > > > > > > request
> > > > > > > > > > > rate
> > > > > > > > > > > > >> > >> throttling
> > > > > > > > > > > > >> > >> > >> as
> > > > > > > > > > > > >> > >> > >> > > well.
> > > > > > > > > > > > >> > >> > >> > > > > > > Becket
> > > > > > > > > > > > >> > >> > >> > > > > > > > > has
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > very
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > well
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > summed my
> > > > rationales
> > > > > > > > above,
> > > > > > > > > > and
> > > > > > > > > > > > one
> > > > > > > > > > > > >> > >> thing to
> > > > > > > > > > > > >> > >> > >> add
> > > > > > > > > > > > >> > >> > >> > > here
> > > > > > > > > > > > >> > >> > >> > > > > is
> > > > > > > > > > > > >> > >> > >> > > > > > > that
> > > > > > > > > > > > >> > >> > >> > > > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > former
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > has a good
> > > support
> > > > > for
> > > > > > > > both
> > > > > > > > > > > > >> "protecting
> > > > > > > > > > > > >> > >> > >> against
> > > > > > > > > > > > >> > >> > >> > > rogue
> > > > > > > > > > > > >> > >> > >> > > > > > > > clients"
> > > > > > > > > > > > >> > >> > >> > > > > > > > > as
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > well
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > as
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > "utilizing a
> > > > cluster
> > > > > > for
> > > > > > > > > > > > >> multi-tenancy
> > > > > > > > > > > > >> > >> > usage":
> > > > > > > > > > > > >> > >> > >> > when
> > > > > > > > > > > > >> > >> > >> > > > > > > thinking
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > about
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > how
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > to
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > explain this
> > to
> > > > the
> > > > > > end
> > > > > > > > > > users, I
> > > > > > > > > > > > >> find
> > > > > > > > > > > > >> > it
> > > > > > > > > > > > >> > >> > >> actually
> > > > > > > > > > > > >> > >> > >> > > > more
> > > > > > > > > > > > >> > >> > >> > > > > > > > natural
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > than
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > request rate
> > > since
> > > > > as
> > > > > > > > > > mentioned
> > > > > > > > > > > > >> above,
> > > > > > > > > > > > >> > >> > >> different
> > > > > > > > > > > > >> > >> > >> > > > > requests
> > > > > > > > > > > > >> > >> > >> > > > > > > > will
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > have
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > quite
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > different
> > > "cost",
> > > > > and
> > > > > > > > Kafka
> > > > > > > > > > > today
> > > > > > > > > > > > >> > already
> > > > > > > > > > > > >> > >> > have
> > > > > > > > > > > > >> > >> > >> > > > various
> > > > > > > > > > > > >> > >> > >> > > > > > > > request
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > types
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > (produce,
> > fetch,
> > > > > > admin,
> > > > > > > > > > > metadata,
> > > > > > > > > > > > >> etc),
> > > > > > > > > > > > >> > >> > >> because
> > > > > > > > > > > > >> > >> > >> > of
> > > > > > > > > > > > >> > >> > >> > > > that
> > > > > > > > > > > > >> > >> > >> > > > > > the
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > request
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > rate
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > throttling
> may
> > > not
> > > > > be
> > > > > > as
> > > > > > > > > > > effective
> > > > > > > > > > > > >> > >> unless it
> > > > > > > > > > > > >> > >> > >> is
> > > > > > > > > > > > >> > >> > >> > set
> > > > > > > > > > > > >> > >> > >> > > > > very
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > conservatively.
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > >
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > Regarding to
> > > user
> > > > > > > > reactions
> > > > > > > > > > when
> > > > > > > > > > > > >> they
> > > > > > > > > > > > >> > are
> > > > > > > > > > > > >> > >> > >> > > throttled,
> > > > > > > > > > > > >> > >> > >> > > > I
> > > > > > > > > > > > >> > >> > >> > > > > > > think
> > > > > > > > > > > > >> > >> > >> > > > > > > > it
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > may
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > differ
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > >
> case-by-case,
> > > and
> > > > > need
> > > > > > > to
> > > > > > > > be
> > > > > > > > > > > > >> > discovered /
> > > > > > > > > > > > >> > >> > >> guided
> > > > > > > > > > > > >> > >> > >> > by
> > > > > > > > > > > > >> > >> > >> > > > > > looking
> > > > > > > > > > > > >> > >> > >> > > > > > > > at
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > relative
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > metrics. So
> in
> > > > other
> > > > > > > words
> > > > > > > > > > users
> > > > > > > > > > > > >> would
> > > > > > > > > > > > >> > >> not
> > > > > > > > > > > > >> > >> > >> expect
> > > > > > > > > > > > >> > >> > >> > > to
> > > > > > > > > > > > >> > >> > >> > > > > get
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > additional
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > information
> by
> > > > > simply
> > > > > > > > being
> > > > > > > > > > told
> > > > > > > > > > > > >> "hey,
> > > > > > > > > > > > >> > >> you
> > > > > > > > > > > > >> > >> > are
> > > > > > > > > > > > >> > >> > >> > > > > > throttled",
> > > > > > > > > > > > >> > >> > >> > > > > > > > > which
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > is
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > all
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > what
> > throttling
> > > > > does;
> > > > > > > they
> > > > > > > > > > need
> > > > > > > > > > > to
> > > > > > > > > > > > >> > take a
> > > > > > > > > > > > >> > >> > >> > follow-up
> > > > > > > > > > > > >> > >> > >> > > > > step
> > > > > > > > > > > > >> > >> > >> > > > > > > and
> > > > > > > > > > > > >> > >> > >> > > > > > > > > see
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > "hmm,
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > I'm
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > throttled
> > > probably
> > > > > > > because
> > > > > > > > > of
> > > > > > > > > > > ..",
> > > > > > > > > > > > >> > which
> > > > > > > > > > > > >> > >> is
> > > > > > > > > > > > >> > >> > by
> > > > > > > > > > > > >> > >> > >> > > > looking
> > > > > > > > > > > > >> > >> > >> > > > > at
> > > > > > > > > > > > >> > >> > >> > > > > > > > other
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > metric
> > > > > > > > > > > > >> > >> > >> > > > > > > > > > > > > > > values: e.g.
> > > > whether
> > > > > > I'm
> > > > > > > > > > > > bombarding
> > > > > > > > > > > > >> the
> > > > > > > > > > > > >> > >> > >> brokers
> > > > > > > > > > > > >> > >> > >> > > with
> > > > > > > > > > > > >> > >> > >> > > > >
> > > > > > > > > > > > >>
> > > > > > > > > > > > > ...
> > > > > > > > > > > > >
> > > > > > > > > > > > > [Message clipped]
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > > *Todd Palino*
> > > Staff Site Reliability Engineer
> > > Data Infrastructure Streaming
> > >
> > >
> > >
> > > linkedin.com/in/toddpalino
> > >
> >
>
>
>
> --
> *Todd Palino*
> Staff Site Reliability Engineer
> Data Infrastructure Streaming
>
>
>
> linkedin.com/in/toddpalino
>

Reply via email to