Since there all the comments so far have been addressed, I will start vote
for this KIP.

Regards,

Rajini

On Thu, Mar 15, 2018 at 6:37 PM, Rajini Sivaram <rajinisiva...@gmail.com>
wrote:

> Thanks, Jun.
>
> 11. updatePartitionMetadata() provides all partitions with their leaders
> so that callbacks that scale down quotas based on fraction of partitions
> hosted on each broker may compute the scaling factor. Callbacks that scale
> up quotas based on the partition count hosted on each broker can simply
> filter out the others. I have updated the Javadoc in the KIP.
>
> On Thu, Mar 15, 2018 at 5:24 PM, Jun Rao <j...@confluent.io> wrote:
>
>> Hi, Rajini,
>>
>> Thanks for the explanation. It makes sense.
>>
>> 11. We probably want to clarify in the interface that every time when
>> updatePartitionMetadata() is called, the full list of partitions whose
>> leader is on this broker will be passed in?
>>
>> Jun
>>
>> On Thu, Mar 15, 2018 at 4:42 AM, Rajini Sivaram <rajinisiva...@gmail.com>
>> wrote:
>>
>> > Hi Jun,
>> >
>> > 12. Sorry, I had to revert the change that removed `
>> > ClientQuotaCallback.quotaLimit()`. We are allowing quota callbacks to
>> use
>> > custom metric tags. For each request, quota manager uses `
>> > ClientQuotaCallback.quota()` to map (user-principal, client-id) to the
>> > metric tags that determine which clients share the quota. When quotas
>> are
>> > updated using  `updateQuota` or `updatePartitionMetadata`, existing
>> metrics
>> > need to updated, but quota managers don't have a reverse mapping of
>> metric
>> > tags to (user-principal, client-id) for invoking`ClientQuotaCallback.
>> > quota()
>> > ` . Callbacks cannot return all updated metrics since they don't have
>> > access to the metrics object and we don't want to require callbacks to
>> > track all the entities for which metrics have been created (since they
>> may
>> > contain client-ids and hence need expiring). With the extra method,
>> quota
>> > manager traverses the metric list after `updateQuota` or `
>> > updatePartitionMetadata` and obtains the latest value corresponding to
>> each
>> > metric based on the tags using `ClientQuotaCallback.quotaLimit()`.
>> >
>> > An alternative may be to delay quota metrics updates until the next
>> request
>> > that uses the metric. When we get sensors, we can check if the quota
>> > configured in the metric matches the value returned by `
>> > ClientQuotaCallback.quota()`. This will be slightly more expensive
>> since we
>> > need to check on every request, but the callback API as well as the
>> quota
>> > manager update code path would be simpler. What do you think?
>> >
>> > Thanks,
>> >
>> > Rajini
>> >
>> >
>> >
>> > On Wed, Mar 14, 2018 at 11:21 PM, Rajini Sivaram <
>> rajinisiva...@gmail.com>
>> > wrote:
>> >
>> > > Hi Jun,
>> > >
>> > > Thank you for reviewing the KIP.
>> > >
>> > > 10. This is the current behaviour (this KIP retains the same behaviour
>> > for
>> > > the default quota callback). We include 'user' and 'client-id' tags in
>> > > all the quota metrics, rather than omit tags at the moment.
>> > >
>> > > 11. Ah, I hadn't realised that. I wasn't expecting to include deleted
>> > > partitions in updatePartitionMetadata. I have updated the Javadoc in
>> the
>> > > KIP to reflect that.
>> > >
>> > > 12. When quotas are updated as a result of `updateQuota` or `
>> > > updatePartitionMetadata`, we may need to update quota bound for one or
>> > > more existing metrics. I didn't want to expose metrics to the
>> callback.
>> > So `
>> > > quotaLimit` was providing the new quotas corresponding to existing
>> > > metrics. But perhaps a neater way to do this is to return updated
>> quotas
>> > as
>> > > the return value of `updateQuota` and `updatePartitionMetadata` so
>> that
>> > > the quota manager can handle metrics updates for those. I have updated
>> > the
>> > > KIP.
>> > >
>> > >
>> > > On Wed, Mar 14, 2018 at 9:57 PM, Jun Rao <j...@confluent.io> wrote:
>> > >
>> > >> Hi, Rajini,
>> > >>
>> > >> Thanks for the KIP. Looks good overall. A few comments below.
>> > >>
>> > >> 10. "If <user> quota config is used, *user* tag is set to user
>> principal
>> > >> of
>> > >> the session and *client-id* tag is set to empty string. " Could we
>> just
>> > >> omit such a tag if the value is empty?
>> > >>
>> > >> 11. I think Viktor has a valid point on handling partition removal.
>> > >> Currently, we use -2 as the leader to signal the deletion of a
>> > partition.
>> > >> Not sure if we want to depend on that in the interface since it's an
>> > >> internal value.
>> > >>
>> > >> 12. Could you explain a bit more the need for quotaLimit()? This is
>> > called
>> > >> after the updateQuota() call. Could we just let updateQuota do what
>> > >> quotaLimit()
>> > >> does?
>> > >>
>> > >> Jun
>> > >>
>> > >> On Wed, Feb 21, 2018 at 10:57 AM, Rajini Sivaram <
>> > rajinisiva...@gmail.com
>> > >> >
>> > >> wrote:
>> > >>
>> > >> > Hi all,
>> > >> >
>> > >> > I have submitted KIP-257 to enable customisation of client quota
>> > >> > computation:
>> > >> >
>> > >> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-
>> > >> > 257+-+Configurable+Quota+Management
>> > >> >
>> > >> >
>> > >> > The KIP proposes to make quota management pluggable to enable
>> > >> group-based
>> > >> > and partition-based quotas for clients.
>> > >> >
>> > >> > Feedback and suggestions are welcome.
>> > >> >
>> > >> > Thank you...
>> > >> >
>> > >> > Regards,
>> > >> >
>> > >> > Rajini
>> > >> >
>> > >>
>> > >
>> > >
>> >
>>
>
>

Reply via email to