Использование эксклюзивной подписки для каждого потребителя - это единственный способ гарантировать, что каждый из ваших потребителей получит ВСЕ сообщения в топи c, а Pulsar достаточно хорошо обрабатывает несколько подписок.
Проблема Кажется, это вариант использования перезапуска сервера, и я не думаю, что простое подключение с новой подпиской UUID является правильным подходом (откладывая потерянные подписки). Вы действительно хотите, чтобы сервер повторно использовал предыдущую подписку после перезапуска. Это связано с тем, что каждая подписка отслеживает последнее сообщение в topi c, которое было обработано и подтверждено, поэтому вы можете точно узнать, где вы остановились до сбоя сервера, если вы повторно подключитесь с тем же UUID подписки. Если вы подключитесь с новым UUID, вы начнете обрабатывать сообщения, созданные с этого момента времени, и все сообщения, созданные в течение периода перезапуска, будут «потеряны»
Поэтому вам нужно будет найти механизм разделять эти UUID при сбоях сервера и возвращать их на перезагружаемый сервер. Один из подходов заключается в том, чтобы иметь механизм, аналогичный выбору лидера zookeeper, при котором каждому серверу предоставляется эксклюзивная аренда, срок действия которой истекает периодически. Затем сервер должен периодически обновлять sh аренду, чтобы сохранить ее. Затем, если серверу понадобится выполнить sh, он не сможет обновить sh аренду этого UUID, и перезапускающемуся серверу будет предоставлена аренда при попытке повторного подключения.
См. https://curator.apache.org/curator-recipes/leader-election.html для лучшего объяснения модели.