Agree, and we can add verification on the client side. When the topic is non-persistent and uses durable to subscribe, print warns logs: “non-persistent not support durable subscribe will use non-durable to subscribe.”
Thanks, Baodi Shi 在 2023年2月9日 15:10:12 上,Jiuming Tao <jm...@streamnative.io.invalid> 写道: > Agree. But we need to take care of the compatibility. How do we handle > > this compatibility? > > > How about set `isDurable = false` when create `NonPersistentSubscription`? > > In `NonPersistentSubscription`, we can change the constructor from > ``` > public NonPersistentSubscription(NonPersistentTopic topic, String > subscriptionName, boolean isDurable, > Map<String, String> properties) { > this.topic = topic; > this.topicName = topic.getName(); > this.subName = subscriptionName; > this.fullName = MoreObjects.toStringHelper(this).add("topic", > topicName).add("name", subName).toString(); > IS_FENCED_UPDATER.set(this, FALSE); > this.lastActive = System.currentTimeMillis(); > this.isDurable = isDurable; > this.subscriptionProperties = properties != null > ? Collections.unmodifiableMap(properties) : > Collections.emptyMap(); > } > > ``` > > to: > > ``` > public NonPersistentSubscription(NonPersistentTopic topic, String > subscriptionName, > Map<String, String> properties) { > this.topic = topic; > this.topicName = topic.getName(); > this.subName = subscriptionName; > this.fullName = MoreObjects.toStringHelper(this).add("topic", > topicName).add("name", subName).toString(); > IS_FENCED_UPDATER.set(this, FALSE); > this.lastActive = System.currentTimeMillis(); > this.isDurable = false; > this.subscriptionProperties = properties != null > ? Collections.unmodifiableMap(properties) : > Collections.emptyMap(); > } > > ``` > > In the broker side, for non-persistent topic, there is no durable > subscriptions. > In the client side, users don’t need to change their code. > > Thanks, > Tao Jiuming > > 2023年2月9日 15:01,Zike Yang <z...@apache.org> 写道: > > > > It makes sense, for non-persistent topic, it should not create a durable > subscription. > > > Agree. But we need to take care of the compatibility. How do we handle > > this compatibility? > > > BR, > > Zike Yang > > > On Thu, Feb 9, 2023 at 2:43 PM Jiuming Tao > > <jm...@streamnative.io.invalid> wrote: > > > > > >> We can add validation to inform the user that a durable subscription on > a > > >> non-persistent topic is invalid. > > > > > > It makes sense, for non-persistent topic, it should not create a durable > subscription. > > > > > > Thanks, > > > Tao Jiuming > > > > > >> 2023年2月8日 23:06,Baodi Shi <ba...@apache.org> 写道: > > >> > > >>> > > >>> But it seems that currently all Durable subscriptions on > > >>> > > >> non-persistent topics are NonDurable, and I wonder if that confuses > > >>> users. > > >>> > > >> > > >> We can add validation to inform the user that a durable subscription on > a > > >> non-persistent topic is invalid. > > >> > > >> > > >> Thanks, > > >> Baodi Shi > > >> > > >> > > >> 在 2023年2月8日 10:48:32 上,Zike Yang <z...@apache.org> 写道: > > >> > > >>> I agree to remove all subscriptions when there're no consumers on the > > >>> non-persistent topic. The configuration > > >>> `subscriptionExpirationTimeMinutes ` should not take effect on the > > >>> non-persistent topic. > > >>> > > >>> But it seems that currently all Durable subscriptions on > > >>> non-persistent topics are NonDurable, and I wonder if that confuses > > >>> users. > > >>> > > >>>> But for `NonPersistentDispatcherMultipleConsumers`, > > >>> `NonPersistentStickyKeyDispatcherMultipleConsumers`, I’m not sure that > > >>> if it matters when we auto delete the subscriptions which has no > > >>> consumers connected. > > >>> > > >>> It doesn't matter IMO. > > >>> > > >>> Thanks, > > >>> Zike Yang > > >>> > > >>> > > >>> > > >>> Zike Yang > > >>> > > >>> On Tue, Feb 7, 2023 at 9:22 PM Jiuming Tao > > >>> <jm...@streamnative.io.invalid> wrote: > > >>> > > >>> > > >>>> I think we are talking about the durable subscription of the > > >>> non-persistent > > >>> > > >>>> topic, right? > > >>> > > >>> > > >>> Yes, non-durable subscriptions created by Reader, if the reader > > >>> disconnected, the subscription will be deleted automatically. > > >>> > > >>> > > >>> > > >>> For `NonPersistentDispatcher`, it has the following implementations: > > >>> > > >>> 1. NonPersistentDispatcherMultipleConsumers > > >>> > > >>> 2. NonPersistentDispatcherSingleActiveConsumer > > >>> > > >>> 3. NonPersistentStickyKeyDispatcherMultipleConsumers > > >>> > > >>> > > >>> For `NonPersistentDispatcherSingleActiveConsumer`, auto delete the > > >>> subscription when there isn’t consumer connected affect nothing. > > >>> > > >>> > > >>> But for `NonPersistentDispatcherMultipleConsumers`, > > >>> `NonPersistentStickyKeyDispatcherMultipleConsumers`, I’m not sure that > if > > >>> it matters when we auto delete the subscriptions which has no > consumers > > >>> connected. > > >>> > > >>> > > >>> If it doesn’t matter, I agree with you. > > >>> > > >>> > > >>> Auto delete the durable subscriptions when there aren’t consumers > > >>> connected to the non-persistent topic. > > >>> > > >>> > > >>> > > >>> Thanks, > > >>> > > >>> Tao Jiuming > > >>> > > >>> > > >>> > > >>>> 2023年2月7日 19:58,PengHui Li <peng...@apache.org <mailto: > > >>> peng...@apache.org>> 写道: > > >>> > > >>>> > > >>> > > >>>> I think we are talking about the durable subscription of the > > >>> non-persistent > > >>> > > >>>> topic, right? For the Reader API (non-durable subscription), the > > >>> > > >>>> subscription will be > > >>> > > >>>> removed after the reader disconnects. If not, it should be BUG. > > >>> > > >>>> > > >>> > > >>>> IMO, we should remove the subscription automatically if all the > consumers > > >>> > > >>>> are disconnected for the non-persistent topic. The consumers can only > get > > >>> > > >>>> the new incoming messages after they connect to the non-persistent > topic. > > >>> > > >>>> It looks like even if we leave the subscription there; it will > > >>> > > >>>> help nothing. > > >>> > > >>>> The behavior should be the same as creating a new subscription with > the > > >>> > > >>>> same subscription name. > > >>> > > >>>> > > >>> > > >>>> For subscription management, users are not able to disable the > > >>> subscription > > >>> > > >>>> auto-creation of the non-persistent topic? We don't have any metadata > > >>> > > >>>> persist > > >>> > > >>>> in the metadata store. After the broker restarts, we will lose > > >>> everything. > > >>> > > >>>> > > >>> > > >>>> So I think we don't need to introduce a new configuration. Instead, we > > >>> > > >>>> should > > >>> > > >>>> figure out if there is a strong reason to leave the durable > subscription > > >>> > > >>>> after > > >>> > > >>>> all the consumers are disconnected. If there is no strong reason, I > tend > > >>> to > > >>> > > >>>> fix > > >>> > > >>>> incorrect behavior directly. > > >>> > > >>>> > > >>> > > >>>> Best, > > >>> > > >>>> Penghui > > >>> > > >>>> > > >>> > > >>>> > > >>> > > >>>> > > >>> > > >>>> > > >>> > > >>>> On Tue, Feb 7, 2023 at 4:14 PM Jiuming Tao > <jm...@streamnative.io.invalid > > >>> <mailto:jm...@streamnative.io.invalid>> > > >>> > > >>>> wrote: > > >>> > > >>>> > > >>> > > >>>>> Hi, > > >>> > > >>>>> > > >>> > > >>>>> I’ve opened a new PIP to discuss: > > >>> > > >>>>> > > >>> > > >>>>> Currently, in Pulsar, we have a configuration named > > >>> > > >>>>> `subscriptionExpirationTimeMinutes` to manage the subscription > > >>> expiration > > >>> > > >>>>> of `PersistentTopic` and `NonPersistentTopic`. > > >>> > > >>>>> > > >>> > > >>>>> When we set a value which is greater than 0 to > > >>> > > >>>>> `subscriptionExpirationTimeMinutes`, it will affect both > > >>> `PersistentTopic` > > >>> > > >>>>> and `NonPersistentTopic`. Their inactive subscriptions will get > expired > > >>> and > > >>> > > >>>>> will clean automatically. > > >>> > > >>>>> > > >>> > > >>>>> For `NonPersistentTopic`, its subscriptions can be clean because we > > >>> don't > > >>> > > >>>>> guarantee its data integrity. But for `PersistentTopic`, if we clean > its > > >>> > > >>>>> subscriptions automatically may lead to data loss. > > >>> > > >>>>> > > >>> > > >>>>> However, their subscription expiration is managed by the same > > >>> > > >>>>> configuration(`subscriptionExpirationTimeMinutes`), we can't manage > > >>> their > > >>> > > >>>>> subscription expiration independently. > > >>> > > >>>>> > > >>> > > >>>>> So I want to introduce a new configuration named > > >>> > > >>>>> `nonPersistentSubscriptionExpirationTimeMinutes` to manage > > >>> > > >>>>> `NonPersistentTopic`'s subscription expiration. > > >>> > > >>>>> > > >>> > > >>>>> > > >>> > > >>>>> Please feel free to leave your comments, the PIP link: > > >>> > > >>>>> https://github.com/apache/pulsar/issues/19448 < > > >>> https://github.com/apache/pulsar/issues/19448> < > > >>> > > >>>>> https://github.com/apache/pulsar/issues/19448 < > > >>> https://github.com/apache/pulsar/issues/19448>> > > >>> > > >>>>> > > >>> > > >>>>> > > >>> > > >>>>> Thanks, > > >>> > > >>>>> Tao Jiuming > > >>> > > >>> > > >>> > > > > > >