#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 минут (или более). Вам нужно дождаться окончания обработки окон, чтобы подтвердить сообщения; невозможно!
В вашем случае правильный дизайн заключается в управлении вашими ошибками в вашем конвейере.