Hi @Enrico @Bo > If there is a problem we should spend time on investigating the problem and not in adding this kind of tools.
You are right. When a user encounters a problem, it often takes a while to solve the root cause. It is important to provide a tool to recover services quickly, and cmd 'unload topic' is often used to solve problems temporarily. But now a topic can be used by multiple teams, such as Business-team A to produce messages, Business-team B and C to consume messages (each using a different subscription name), and Data-team D to read messages using reader API (using a random subscription name). When there is a consumption problem in subscription B, if we do unload the topic, this will affect teams A, B, C, D, and when we provide a new API to reset subscribers, the impact can be controlled only to affect team B. The new API can also be used in this scenario: Trigger consumer rebalance. So I feel like we can add this API with relatively small changes. Thanks Yubiao Feng On Wed, Jan 11, 2023 at 5:00 PM Yubiao Feng <yubiao.f...@streamnative.io> wrote: > Hi community > > I am starting a DISCUSS for PIP-240: A new API to unload subscriptions. > > PIP issue: https://github.com/apache/pulsar/issues/19187 > > ### Motivation > > We sometimes try to unload the topic to resolve some consumption-stop > issues. But the unloading topic will also impact the producer side. > > ### Goal > > Providing a new API to unload the subscription dimension triggers > reconnection of all consumers on that subscription and reconnection is > guaranteed by the client. The API will be used in these ways: > - unload special subscription of one topic(or partitioned topic) > - unload all subscriptions of one topic(or partitioned topic) > - unload subscriptions of one topic(or partitioned topic) by regular > expression > - If a reader's subscription name is not set, a random subscription name > prefixed with 'multiTopicsReader-' or 'reader-' will be used, and users can > uninstall these subscriptions using regular expressions. > > In addition to triggering consumer disconnection, Unloading Subscribers > will restart the Dispatcher, which resets the redeliver message queue and > delayed message queue in the Broker's memory, which can help resolve issues > caused by an abnormal dispatcher state. However, the execution flow of > Unloading Subscribers does not include a restart of the Managed Cursor > related to this dispatcher; if there is a problem with the cursor, we can > only rely on the unload topic to solve it. > > Note: From the client's perspective, this connection may be shared by > consumers, producers, and transactions, so Unloading Subscribers maybe > impact the producer and transaction. > > #### These scenarios are not supported > - Functions `message-dedup`, `geo-replication,` and `shadow-topic` also > read messages from the topic, but Unloading subscribers will not support > triggering restarts of these three functions( because the cursor is used > directly to read the data in these scenarios, not the consumer or reader ). > - The Compression task(subscription name is `__compaction`) also use a > reader to read data, but Unloading Subscribers does not support it because > this task creates a new reader each time it starts. > - Do not support all topics related to Transaction features. > - `__transaction_buffer_snapshot` works with the task TB recover, and > this task will create a new reader each time they start. > - `__transaction_pending_ack` works with the task Transaction Pending > Ack Store replay, and this task will use managed cursor directly to read > data. > - `__transaction_log_xxx` works with the task Transaction Log, which > will use managed cursor directly to read data. > - `transaction_coordinator_assign` No data will be written on this topic. > > #### Special system topic supports > The system topic `__change_events` is used to support topic-level > policies, there may also be some message delivery issues in this scenario, > so Unloading Subscribers will support this topic. > > ### API Changes > > #### For persistent topic > ``` > pulsar-admin persistent unload {topic_name} -s {sub_name} > ``` > > #### For non-persistent topic > ``` > pulsar-admin non-persistent unload {topic_name} -s {sub_name} > ``` > > #### Explain the param `-s` > - set param `-s` to special sub name to unload special subscription > - set param `-s` to `**` to unload all subscriptions under this topic > - set param `-s` to `regexp` to unload a batch subscriptions under this > topic > > > Thanks > Yubiao Feng >