Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PIP-152] Support subscription level dispatch rate limiter setting. #15094

Closed
Jason918 opened this issue Apr 9, 2022 · 1 comment
Closed
Assignees
Labels

Comments

@Jason918
Copy link
Contributor

Jason918 commented Apr 9, 2022

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.

  1. 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.

@Jason918 Jason918 self-assigned this Apr 9, 2022
@Jason918 Jason918 changed the title [PIP] Support subscription level dispatch rate limiter setting. [PIP 152] Support subscription level dispatch rate limiter setting. Apr 9, 2022
@Jason918 Jason918 changed the title [PIP 152] Support subscription level dispatch rate limiter setting. [PIP-152] Support subscription level dispatch rate limiter setting. Apr 9, 2022
@github-actions
Copy link

The issue had no activity for 30 days, mark with Stale label.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant