Рекомендации по дренированию или очистке темы pubsub Google Cloud
Для тем pubsub с количеством сообщений в диапазоне ~ 100 тыс., что является наилучшей практикой для дренирования/удаления/очистки/удаления всех сообщений с помощью gcloud-java SDK?
Возможные решения:
-
Удаление и повторное создание подписчиков, а затем издателей
-
Высокий concurrency pull + ack (легко попасть в эту квоту)
- Что-то еще
Я надеюсь, что этот процесс может быть быстрым (не более 60 секунд, скажем), надежным и использует поддерживаемые SDK-методы с минимальным другим кодом.
Ответы
Ответ 1
Обновление с описанием функции снимка и поиска:
Можно использовать seek в подписке Pub/Sub (в настоящее время в альфа-формате), чтобы получать более старые сообщения, пытаясь найти отметку времени, соответствующую текущему. Лучший способ - использовать инструмент командной строки gcloud. Команда для подтверждения сообщений, опубликованных до определенной отметки времени, будет такой:
gcloud pubsub subscriptions seek <subscription path> --time=yyyy-mm-ddThh:mm:ss
Предыдущий ответ до добавления снимка и поиска:
В настоящее время Google Cloud Pub/Sub не имеет возможности очищать старые сообщения, хотя мы хотим добавить его. Удаление и воссоздание подписки будет наиболее эффективным способом очистки, как с точки зрения времени и стоимости. Вам не придется ничего делать со своими издателями; любые сообщения, опубликованные в точке после воссоздания, будут отправлены подписчикам при воссозданной подписке.
Ответ 2
.seek() не очень хорошо работал в python, используя предоставленный Timestamp(), инстанцированный из класса timestamp. В моих тестах время публикации сообщения четко показывало время до того, как я использую .seek(); Но сообщения до того времени, которое я ищу, не все подтверждают (что истощит сообщение в подписке). Во всяком случае, многие сообщения вернулись из мертвых!
Лучший способ, который я сейчас найду, - запустить функцию очистки, использующую синхронное извлечение (subscriber.pull), с некоторыми вменяемыми max_messages и timeout; или с асинхронным напряжением, но дайте ему большее время ожидания (например, 6-8 + секунд); к сожалению, если вы не отключите синхронное извлечение, оно просто зависнет и будет ждать, если ему не удастся хотя бы одно сообщение; и для асинхронного он просто будет ждать вечно, если вы не сделаете тайм-аут.
Я хотел бы попробовать поиск по снимку, но не имел необходимых разрешений (также для удаления/повторного создания подписки)