Yes, you need one dedicated subscription for each consumer when you are using the Pulsar Consumer API.
one possible solution is to use the subscription expiration feature to cleanup the subscriptions.
https://stackoverflow.com/a/69036785
Another choice would be to use the reader API and store the latest consumed position in some external storage. This would only work in a model where there's no need for per-message state. The position would be handled like an offset.