Thanks, Becket. Assuming that requiring new client implementations to issue ApiVersionsRequest before issuing any other requests is reasonable as you mentioned, I am wondering if keeping track of brokers that support KIP-219 is actually simpler than keeping a map from each request type to its min version number supporting KIP-219 and checking the version of every single request to see whether or not to throttle from the client side. To me, it looks like a broker property that can be cached, and checking every single request seems excessive.
Thanks, Jon On Fri, Apr 27, 2018 at 11:36 AM, Becket Qin <becket....@gmail.com> wrote: > The reason we wanted to bump up all the request versions was let the > clients know whether the broker has already throttled the request or not. > This avoids double throttling in both brokers and clients, if the clients > implementation supports KIP-219. > > The new change uses only ApiVersionRequest, instead of all the requests, to > indicate whether the brokers have applied throttling or not. The difference > is that all the clients must issue ApiVersionRequest first before issuing > any other requests. This has no impact on the existing clients. But for > clients implementation that wants to support KIP-219, they need to follow > this practice, which seems to be reasonable. > Initially I thought the change is fine. However, thinking about this again, > that means the clients implementation needs to remember the ApiVersions of > each broker, which may have some complexity. Also this seems introduces the > behavior dependency between different requests, which seems unnecessary. > > Due to the above reasons, I think it might be better to bump up all the > request versions. > > Thanks, > > Jiangjie (Becket) Qin > > > On Wed, Apr 25, 2018 at 3:19 PM, Jonghyun Lee <jonghy...@gmail.com> wrote: > > > Hello, > > > > Per Ismael's suggestion, I'd like to get comments from the original > voters > > for KIP-219 (Becket, Jun, Rajini) and others about the new interface > change > > proposed in the discussion thread ( > > https://markmail.org/search/?q=kafka+KIP-219#query:kafka% > > 20KIP-219+page:1+mid:5rwju2gwpicojr3f+state:results). > > Would you let me know? > > > > Thanks, > > Jon > > > > > > On Wed, Apr 25, 2018 at 2:43 PM, Dong Lin <lindon...@gmail.com> wrote: > > > > > +Jon > > > > > > On Mon, 22 Jan 2018 at 10:38 AM Becket Qin <becket....@gmail.com> > wrote: > > > > > >> Thanks for the discussion and voting. > > >> > > >> KIP-219 has passed with +3 binding votes (Becket, Jun, Rajini). > > >> > > >> On Thu, Jan 18, 2018 at 1:32 AM, Rajini Sivaram < > > rajinisiva...@gmail.com> > > >> wrote: > > >> > > >> > Hi Becket, > > >> > > > >> > Thanks for the update. Yes, it does address my concern. > > >> > > > >> > +1 (binding) > > >> > > > >> > Regards, > > >> > > > >> > Rajini > > >> > > > >> > On Wed, Jan 17, 2018 at 5:24 PM, Becket Qin <becket....@gmail.com> > > >> wrote: > > >> > > > >> > > Actually returning an empty fetch request may still be useful to > > >> reduce > > >> > the > > >> > > throttle time due to request quota violation because the > > FetchResponse > > >> > send > > >> > > time will be less. I just updated the KIP. > > >> > > > > >> > > Rajini, does that address your concern? > > >> > > > > >> > > On Tue, Jan 16, 2018 at 7:01 PM, Becket Qin <becket....@gmail.com > > > > >> > wrote: > > >> > > > > >> > > > Thanks for the reply, Jun. > > >> > > > > > >> > > > Currently the byte rate quota does not apply to > HeartbeatRequest, > > >> > > > JoinGroupRequest/SyncGroupRequest. So the only case those > > requests > > >> are > > >> > > > throttled is because the request quota is violated. In that > case, > > >> the > > >> > > > throttle time does not really matter whether we return a full > > >> > > FetchResponse > > >> > > > or an empty one. Would it be more consistent if we throttle > based > > on > > >> > the > > >> > > > actual throttle time / channel mute time? > > >> > > > > > >> > > > Thanks, > > >> > > > > > >> > > > Jiangjie (Becket) Qin > > >> > > > > > >> > > > On Tue, Jan 16, 2018 at 3:45 PM, Jun Rao <j...@confluent.io> > > wrote: > > >> > > > > > >> > > >> Hi, Jiangjie, > > >> > > >> > > >> > > >> You are right that the heartbeat is done in a channel different > > >> from > > >> > the > > >> > > >> fetch request. I think it's still useful to return an empty > fetch > > >> > > response > > >> > > >> when the quota is violated. This way, the throttle time for the > > >> > > heartbeat > > >> > > >> request won't be large. I agree that we can just mute the > channel > > >> for > > >> > > the > > >> > > >> fetch request for the throttle time computed based on a full > > fetch > > >> > > >> response. This probably also partially addresses Rajini's #1 > > >> concern. > > >> > > >> > > >> > > >> Thanks, > > >> > > >> > > >> > > >> Jun > > >> > > >> > > >> > > >> On Mon, Jan 15, 2018 at 9:27 PM, Becket Qin < > > becket....@gmail.com> > > >> > > wrote: > > >> > > >> > > >> > > >> > Hi Rajini, > > >> > > >> > > > >> > > >> > Thanks for the comments. Pleas see the reply inline. > > >> > > >> > > > >> > > >> > Hi Jun, > > >> > > >> > > > >> > > >> > Thinking about the consumer rebalance case a bit more, I am > not > > >> sure > > >> > > if > > >> > > >> we > > >> > > >> > need to worry about the delayed rebalance due to quota > > violation > > >> or > > >> > > not. > > >> > > >> > The rebalance actually uses a separate channel to > coordinator. > > >> > > Therefore > > >> > > >> > unless the request quota is hit, the rebalance won't be > > >> throttled. > > >> > > Even > > >> > > >> if > > >> > > >> > request quota is hit, it seems unlikely to be delayed long. > So > > it > > >> > > looks > > >> > > >> > that we don't need to unmute the channel earlier than needed. > > >> Does > > >> > > this > > >> > > >> > address your concern? > > >> > > >> > > > >> > > >> > Thanks, > > >> > > >> > > > >> > > >> > Jiangjie (Becket) Qin > > >> > > >> > > > >> > > >> > On Mon, Jan 15, 2018 at 4:22 AM, Rajini Sivaram < > > >> > > >> rajinisiva...@gmail.com> > > >> > > >> > wrote: > > >> > > >> > > > >> > > >> > > Hi Becket, > > >> > > >> > > > > >> > > >> > > A few questions: > > >> > > >> > > > > >> > > >> > > 1. KIP says: *Although older client implementations (prior > to > > >> > > >> knowledge > > >> > > >> > of > > >> > > >> > > this KIP) will immediately send the next request after the > > >> broker > > >> > > >> > responds > > >> > > >> > > without paying attention to the throttle time field, the > > >> broker is > > >> > > >> > > protected by virtue of muting the channel for time X. i.e., > > the > > >> > next > > >> > > >> > > request will not be processed until the channel is > unmuted. * > > >> > > >> > > For fetch requests, the response is sent immediately and > the > > >> mute > > >> > > >> time on > > >> > > >> > > the broker based on empty fetch response will often be zero > > >> > (unlike > > >> > > >> the > > >> > > >> > > throttle time returned to the client based on non-empty > > >> response). > > >> > > >> Won't > > >> > > >> > > that lead to a tight loop of fetch requests from old > clients > > >> > > >> > (particularly > > >> > > >> > > expensive with SSL)? Wouldn't it be better to retain > current > > >> > > behaviour > > >> > > >> > for > > >> > > >> > > old clients? Also, if we change the behaviour for old > > clients, > > >> > > client > > >> > > >> > > metrics that track throttle time will report a lot of > > throttle > > >> > > >> unrelated > > >> > > >> > to > > >> > > >> > > actual throttle time. > > >> > > >> > > > > >> > > >> > For consumers, if quota is violated, the throttle time on the > > >> broker > > >> > > >> will > > >> > > >> > not be 0. It is just that the throttle time will not be > > >> increasing > > >> > > >> because > > >> > > >> > the consumer will return an empty response in this case. So > > there > > >> > > should > > >> > > >> > not be a tight loop. > > >> > > >> > > > >> > > >> > > > >> > > >> > > 2. KIP says: *The usual idle timeout i.e., > > >> > connections.max.idle.ms > > >> > > >> > > <http://connections.max.idle.ms> will still be honored > > during > > >> the > > >> > > >> > throttle > > >> > > >> > > time X. This makes sure that the brokers will detect client > > >> > > connection > > >> > > >> > > closure in a bounded time.* > > >> > > >> > > Wouldn't it be better to bound maximum throttle time to > > >> > > >> > > *connections.max.idle.ms > > >> > > >> > > <http://connections.max.idle.ms>*? If we mute for a time > > >> greater > > >> > > than > > >> > > >> > > *connections.max.idle.ms > > >> > > >> > > <http://connections.max.idle.ms>* and then close a client > > >> > > connection > > >> > > >> > > simply > > >> > > >> > > because we had muted it on the broker for a longer throttle > > >> time, > > >> > we > > >> > > >> > force > > >> > > >> > > a reconnection and read the next request from the new > > >> connection > > >> > > >> straight > > >> > > >> > > away. This feels the same as a bound on the quota of * > > >> > > >> > > connections.max.idle.ms > > >> > > >> > > <http://connections.max.idle.ms>*, but with added load on > > the > > >> > > broker > > >> > > >> for > > >> > > >> > > authenticating another connection (expensive with SSL). > > >> > > >> > > > > >> > > >> > I think we need to think about the consumer prior to and > after > > >> this > > >> > > KIP > > >> > > >> > separately. > > >> > > >> > > > >> > > >> > For consumer prior to this KIP, even if we unmute the channel > > >> after > > >> > > >> > connection.max.idle.ms, it is likely that the consumers have > > >> > already > > >> > > >> > reached request.timeout.ms before that and has reconnected > to > > >> the > > >> > > >> broker. > > >> > > >> > So there is no real difference whether we close the throttled > > >> > channel > > >> > > or > > >> > > >> > not. > > >> > > >> > > > >> > > >> > For consumers after the KIP, because they will honor the > > throttle > > >> > > time, > > >> > > >> > they will back off until throttle time is reached. If that > > >> throttle > > >> > > >> time is > > >> > > >> > longer than connection.max.idle.ms, it seems not a big > > overhead > > >> > > because > > >> > > >> > there will only be one connection re-establishment in quite a > > few > > >> > > >> minutes. > > >> > > >> > Compared with such overhead, it seems more important to honor > > the > > >> > > quota > > >> > > >> so > > >> > > >> > the broker can survive. > > >> > > >> > > > >> > > >> > > > >> > > >> > > 3. Are we changing the behaviour of network bandwidth quota > > for > > >> > > >> > > Produce/Fetch and retaining current behaviour for request > > >> quotas? > > >> > > >> > > > > >> > > >> > This is going to be applied to all the quota. Including > request > > >> > > quotas. > > >> > > >> > > > >> > > >> > > > >> > > >> > > > > >> > > >> > > Thanks, > > >> > > >> > > > > >> > > >> > > Rajini > > >> > > >> > > > > >> > > >> > > > > >> > > >> > > > > >> > > >> > > On Wed, Jan 10, 2018 at 10:29 PM, Jun Rao < > j...@confluent.io> > > >> > wrote: > > >> > > >> > > > > >> > > >> > > > Hi, Jiangjie, > > >> > > >> > > > > > >> > > >> > > > Thanks for the updated KIP. +1 > > >> > > >> > > > > > >> > > >> > > > Jun > > >> > > >> > > > > > >> > > >> > > > On Mon, Jan 8, 2018 at 7:45 PM, Becket Qin < > > >> > becket....@gmail.com> > > >> > > >> > wrote: > > >> > > >> > > > > > >> > > >> > > > > Thanks for the comments, Jun. > > >> > > >> > > > > > > >> > > >> > > > > 1. Good point. > > >> > > >> > > > > 2. Also makes sense. Usually the > connection.max.idle.ms > > is > > >> > high > > >> > > >> > enough > > >> > > >> > > > so > > >> > > >> > > > > the throttling is impacted. > > >> > > >> > > > > > > >> > > >> > > > > I have updated the KIP to reflect the changes. > > >> > > >> > > > > > > >> > > >> > > > > Thanks, > > >> > > >> > > > > > > >> > > >> > > > > Jiangjie (Becket) Qin > > >> > > >> > > > > > > >> > > >> > > > > > > >> > > >> > > > > On Mon, Jan 8, 2018 at 6:30 PM, Jun Rao < > > j...@confluent.io> > > >> > > wrote: > > >> > > >> > > > > > > >> > > >> > > > > > Hi, Jiangjie, > > >> > > >> > > > > > > > >> > > >> > > > > > Sorry for the late response. The proposal sounds good > > >> > > overall. A > > >> > > >> > > couple > > >> > > >> > > > > of > > >> > > >> > > > > > minor comments below. > > >> > > >> > > > > > > > >> > > >> > > > > > 1. For throttling a fetch request, we could > potentially > > >> just > > >> > > >> send > > >> > > >> > an > > >> > > >> > > > > empty > > >> > > >> > > > > > response. We can return a throttle time calculated > > from a > > >> > full > > >> > > >> > > > response, > > >> > > >> > > > > > but only mute the channel on the server based on a > > >> throttle > > >> > > time > > >> > > >> > > > > calculated > > >> > > >> > > > > > based on the empty response. This has the benefit > that > > >> the > > >> > > >> server > > >> > > >> > > will > > >> > > >> > > > > mute > > >> > > >> > > > > > the channel much shorter, which will prevent the > > consumer > > >> > from > > >> > > >> > > > > rebalancing > > >> > > >> > > > > > when throttled. > > >> > > >> > > > > > > > >> > > >> > > > > > 2. The wiki says "connections.max.idle.ms should be > > >> ignored > > >> > > >> during > > >> > > >> > > the > > >> > > >> > > > > > throttle time X." This has the potential issue that a > > >> server > > >> > > may > > >> > > >> > not > > >> > > >> > > > > detect > > >> > > >> > > > > > that a client connection is already gone until after > an > > >> > > >> arbitrary > > >> > > >> > > > amount > > >> > > >> > > > > of > > >> > > >> > > > > > time. Perhaps we could still just close a connection > if > > >> the > > >> > > >> server > > >> > > >> > > has > > >> > > >> > > > > > muted it for longer than connections.max.idle.ms. > This > > >> will > > >> > > at > > >> > > >> > least > > >> > > >> > > > > bound > > >> > > >> > > > > > the time for a server to detect closed client > > >> connections. > > >> > > >> > > > > > > > >> > > >> > > > > > Thanks, > > >> > > >> > > > > > > > >> > > >> > > > > > Jun > > >> > > >> > > > > > > > >> > > >> > > > > > > > >> > > >> > > > > > On Mon, Nov 20, 2017 at 5:30 PM, Becket Qin < > > >> > > >> becket....@gmail.com> > > >> > > >> > > > > wrote: > > >> > > >> > > > > > > > >> > > >> > > > > > > Hi, > > >> > > >> > > > > > > > > >> > > >> > > > > > > We would like to start the voting thread for > KIP-219. > > >> The > > >> > > KIP > > >> > > >> > > > proposes > > >> > > >> > > > > to > > >> > > >> > > > > > > improve the quota communication between the brokers > > and > > >> > > >> clients, > > >> > > >> > > > > > especially > > >> > > >> > > > > > > for cases of long throttling time. > > >> > > >> > > > > > > > > >> > > >> > > > > > > The KIP wiki is following: > > >> > > >> > > > > > > https://cwiki.apache.org/ > > confluence/display/KAFKA/KIP- > > >> > > >> > > > > > 219+-+Improve+quota+ > > >> > > >> > > > > > > communication > > >> > > >> > > > > > > > > >> > > >> > > > > > > The discussion thread is here: > > >> > > >> > > > > > > http://markmail.org/search/?q= > > >> kafka+KIP-219#query:kafka% > > >> > > >> > > > > > > 20KIP-219+page:1+mid: > ooxabguy7nz7l7zy+state:results > > >> > > >> > > > > > > > > >> > > >> > > > > > > Thanks, > > >> > > >> > > > > > > > > >> > > >> > > > > > > Jiangjie (Becket) Qin > > >> > > >> > > > > > > > > >> > > >> > > > > > > > >> > > >> > > > > > > >> > > >> > > > > > >> > > >> > > > > >> > > >> > > > >> > > >> > > >> > > > > > >> > > > > > >> > > > > >> > > > >> > > > > > >