На каком этапе Dataflow / Apache Beam подтверждает сообщение pub / sub?

У меня есть задание потоковой передачи данных с подпиской Pub / Sub в качестве неограниченного источника. Я хочу знать, на каком этапе поток данных подтверждает входящее сообщение pub / sub. Мне кажется, что сообщение теряется, если на любом этапе конвейера потока данных возникает исключение.

Также я хотел бы знать, как лучше всего писать конвейер потока данных с неограниченным источником pub / sub для извлечения сообщений в случае сбоя. Спасибо!


person Kakaji    schedule 13.10.2017    source источник


Ответы (1)


Средство выполнения потоковой передачи потока данных подтверждает сообщения pubsub, полученные пакетом после того, как пакет был успешно завершен и результаты пакета (выходы, мутации состояния и т. Д.) Были надежно зафиксированы. Неудачные пакеты повторяются до тех пор, пока они не будут успешными, и не вызывают потери данных. Если вы считаете, что может произойти потеря данных, укажите подробности (идентификатор задания и ваши аргументы, которые приводят вас к выводу, что данные были потеряны из-за сбоев), и мы рассмотрим.

person jkff    schedule 14.10.2017
comment
Вот идентификатор вакансии, 2017-10-12_19_26_32-4234684930060241078. В консоли вы можете увидеть, что существует этап, на котором произошел сбой, и поэтому в его разделе «Коллекции вывода» ничего не отображается. Мне не удалось снова получить потерянные данные с помощью нового задания потока данных (после отмены этого). Я также не мог получить данные с помощью клиентской библиотеки pub / sub. - person Kakaji; 15.10.2017
comment
Хм, да, если вы отмените конвейер, все промежуточные данные в конвейере будут потеряны. Когда поток данных загружает данные в конвейер, он надежно сохраняет их и защищает от потери данных в случае временных ошибок, но отмена конвейера - это другое дело. Я полагаю, вы хотите, чтобы сообщения подтверждались, когда они были полностью обработаны всем конвейером, но эту концепцию почти невозможно определить в общем виде. Как правило, в случае сбоев, если вы хотите сохранить данные, либо используйте функцию обновления, чтобы обновить конвейер с исправным кодом, либо используйте Drain для корректной отмены. - person jkff; 15.10.2017
comment
Я делаю конвейер вроде read_from_pubsub- ›process_message-› send_outside. В send_outside, если я получил исключение, например ошибку 50x из конечной точки, я записываю ошибку в журнал и снова вызываю исключение, чтобы Dataflow перехватил. У меня проблема с тем, что все шаги перестали работать после возникновения исключения. Как я могу правильно вернуть функцию send_outside? (Кроме вызова исключения?) - person sees; 21.12.2020