Hi Joe,

> The rate limits that are currently in place are there to protect the Pulsar
> service,  to manage  multi-tenancy on the broker. This is not  meant as a
> feature to manage demand side throttling.

Yes,  this is not only for demand side throttling. Consider the case of catch 
up consuming with
multiply subscriber. Different subscriber of the same topic can be considered 
as different 
tenancies, and this subscription level dispatch rate limiter setting can server 
the purpose of 
managing multi-tenancy on the broker. 

For example, we have a topic with 1TB message data stored in Pulsar and two 
subscriber. 
The resource consumption is quite different if we allow two subscriber 
throttling both at 
1000MB/s or one is 1000MB/s and the other is 10MB/s.


> There is no need to add complexity
For this point, I have to clarify that the complexity is not significant. The 
subscription level 
dispatch throttling is already implemented, only use the same value for all 
subscriptions of the 
same topic.

Thanks,
Haiting


On 2022/04/12 17:58:43 Joe F wrote:
> -1
> 
> The rate limits that are currently in place are there to protect the Pulsar
> service,  to manage  multi-tenancy on the broker. This is not  meant as a
> feature to  manage demand side throttling.
> 
> In my opinion,  this is best done as a client side feature. There is no
> need to add complexity  to  the broker to manage demand side throttling.
> Just throttle demand on the client side.
> 
> 
> 
> -joe
> 
> On Mon, Apr 11, 2022 at 7:54 PM Zixuan Liu <node...@gmail.com> wrote:
> 
> > +1
> >
> > Zixuan
> >
> > mattison chao <mattisonc...@gmail.com> 于2022年4月12日周二 09:24写道:
> >
> > > +1
> > >
> > > Looks like a very useful feature. Thank you.
> > >
> > > Best,
> > > Mattison
> > >
> > > On Mon, 11 Apr 2022 at 08:55, PengHui Li <peng...@apache.org> wrote:
> > >
> > > > +1
> > > >
> > > > Penghui
> > > >
> > > > On Sat, Apr 9, 2022 at 4:24 PM Haiting Jiang <jianghait...@apache.org>
> > > > wrote:
> > > >
> > > > > Hi Pulsar community,
> > > > >
> > > > > I created a PIP to add support for subscription level dispatch rate
> > > > > limiter setting.
> > > > >
> > > > > The proposal can be found:
> > > https://github.com/apache/pulsar/issues/15094
> > > > >
> > > > > ----
> > > > >
> > > > > ## Motivation
> > > > >
> > > > > Currently, for message dispatch rate limiter in a subscription , we
> > > have
> > > > 3
> > > > > level setting :
> > > > > - Broker level setting: configured with
> > > > > `dispatchThrottlingRatePerSubscriptionInMsg` and
> > > > > `dispatchThrottlingRatePerSubscriptionInByte` in broker.conf
> > > > > - Namespace level setting: configured with
> > > > >
> > `org.apache.pulsar.client.admin.Namespaces#setSubscriptionDispatchRate`
> > > > > - Topic level setting: configured with
> > > > >
> > > >
> > >
> > `org.apache.pulsar.client.admin.TopicPolicies#setSubscriptionDispatchRate`
> > > > >
> > > > > As we all know, in the pub-sub messaging model, different subscriber
> > of
> > > > > the same topic process the messages for various purpose, and they may
> > > > have
> > > > > different requirement of message dispatch rate limiter. Here are some
> > > use
> > > > > case in my organization:
> > > > > - On the client side, subscriptions have different
> > > max-process-capacity.
> > > > > If the dispatch rate is too large, they may crush their downstream
> > > > services.
> > > > > - We are billing base on the max message rate of the subscription.
> > Some
> > > > > are sensitive to budgets and willing to pay less for lower
> > throughput.
> > > > >
> > > > >
> > > > > ## Goal
> > > > >
> > > > > Support subscription level dispatch rate limiter setting.
> > > > >
> > > > > ## API Changes
> > > > >
> > > > >
> > > > > 1. Add client api in org.apache.pulsar.client.admin.TopicPolicies.
> > > > > ```
> > > > > void getSubscriptionDispatchRate(String topic, String sub) throws
> > > > > PulsarAdminException;
> > > > > void getSubscriptionDispatchRate(String topic, String sub, boolean
> > > > > applied) throws PulsarAdminException;
> > > > > void setSubscriptionDispatchRate(String topic, String sub,
> > DispatchRate
> > > > > dispatchRate) throws PulsarAdminException;
> > > > > void removeSubscriptionDispatchRate(String topic, String sub) throws
> > > > > PulsarAdminException;
> > > > >
> > > > > //And the async version of these methods.
> > > > >
> > > > > ```
> > > > >
> > > > > 2. Add new admin  API
> > > > >
> > > > > ```
> > > > > @PUT @DELETE @GET
> > > > > @Path("/{tenant}/{namespace}/{topic}/{subName}/dispatchRate")
> > > > >
> > > > > ```
> > > > >
> > > > > ## Implementation
> > > > >
> > > > > The rate limiter itself is already implemented with each
> > subscription.
> > > We
> > > > > only need to update the rate limiter settings if subscription level
> > > > config
> > > > > is set.
> > > > > I propose to just add a new field in
> > > > > `org.apache.pulsar.common.policies.data.TopicPolicies` to store the
> > > data.
> > > > > ```
> > > > > private Map<String/*SubName*/, DispatchRateImpl>
> > > > > subscriptionDispatchRateMap;
> > > > > ```
> > > > > And subscription level rate limiter setting has higher priority than
> > > > topic
> > > > > level. We need to calculate the applied value when we create the
> > > > > subscription or any level config is changed.
> > > > >
> > > > > ## Reject Alternatives
> > > > > None yet.
> > > > >
> > > > >
> > > > > Thanks,
> > > > > Haiting
> > > > >
> > > >
> > >
> >
> 

Reply via email to