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