Есть ли способ, которым я могу использовать сообщение Google PubSub, используя синхронное извлечение в задании Apache Beam

#google-cloud-platform #google-cloud-dataflow #apache-beam #publish-subscribe #apache-beam-io

#google-облачная платформа #google-cloud-поток данных #apache-beam #опубликовать-подписаться #apache-beam-io

Вопрос:

Я уже просмотрел клиентскую библиотеку, предоставленную Google в приведенном ниже документе. Данная клиентская библиотека предназначена только для опроса сообщения от PubSub, но она не будет опрашивать непрерывно, пока мы не создадим неограниченный соединитель источника. https://cloud.google.com/pubsub/docs/pull#synchronous_pull

Поскольку исходный соединитель, который я пытаюсь создать, является неограниченным источником, для этого мне нужно позаботиться о маркере контрольной точки, внедрить PubSub reader, разделить источник PubSub и реализовать логику ACK и NACK, и я считаю, что для создания моего собственного неограниченного исходного соединителя потребуется много времени. Прямо сейчас PubSubIO (Beam api) поддерживает только асинхронное извлечение. Итак, могу ли я каким-либо образом просто реализовать логическую логику ACK n NACK поверх api PubSubIO, предоставляемого Apache Beam. Существует ли какой-либо уже разработанный API, который больше подходит для такого рода вариантов использования.

С помощью синхронного извлечения вы можете подтвердить предполагаемое сообщение и удалить потребляемое сообщение в случае любого сбоя синтаксического анализа.

Комментарии:

1. В чем ваша проблема с асинхронным опросом? задание beam запускается, извлекает все сообщения и останавливается? Вы хотите бесконечную работу?

2. С помощью синхронного извлечения вы можете подтвердить предполагаемое сообщение и удалить потребляемое сообщение в случае какого-либо сбоя синтаксического анализа, поэтому я пытаюсь использовать синхронное извлечение. При асинхронном извлечении, как только данные, используемые PubSubIO, подтверждают весь идентификатор сообщения @guillaumeblaquiere

3. Хорошо, и вы хотите взломать сообщение, чтобы использовать тему «мертвое письмо» в подписке на PubSub, верно?

4. Да, вы правы!! @guillaumeblaquiere

Ответ №1:

Функция, которую вы ожидаете, не существует и не должна существовать.

Текущее поведение, асинхронное извлечение, получает сообщение, и как только сообщение сохраняется (в рабочем или приемнике в конвейере, первом из обоих), сообщение получает подтверждение.

В вашем случае вы ожидаете вручную подтвердить сообщение в соответствии с обработкой конвейера. Однако у вас есть 10 минут, чтобы подтвердить свои сообщения с помощью PubSub. Представьте, что вы создаете конвейер с окнами продолжительностью 15 минут (или более). Вам нужно дождаться окончания обработки окон, чтобы подтвердить сообщения; невозможно!

В вашем случае правильный дизайн заключается в управлении вашими ошибками в вашем конвейере.