Рекомендации по дренированию или очистке темы 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 + секунд); к сожалению, если вы не отключите синхронное извлечение, оно просто зависнет и будет ждать, если ему не удастся хотя бы одно сообщение; и для асинхронного он просто будет ждать вечно, если вы не сделаете тайм-аут.

Я хотел бы попробовать поиск по снимку, но не имел необходимых разрешений (также для удаления/повторного создания подписки)