2017-01-18 9 views
1

Был номер question on this topic, ответ сказал: «Подтверждение будет сделано после того, как сообщение будет долговечно сохранено где-то в конвейере потока данных».Когда Dataflow подтверждает сообщение о пакетах из PubSubIO?

Концептуально это имеет смысл, но я не уверен, как Dataflow способен отслеживать сообщение после его десериализации и преобразования в конвейере до того, как его полезная нагрузка будет сохранена.

В нашем случае сообщение PubSub содержит партию элементов. После того, как сообщение получено и десериализовано, мы разделили пакет для обработки. В конце концов, элемент в партии может быть либо отброшен, либо передан в хранилище данных в зависимости от его метки времени.

Как работает подтверждение в этой ситуации?

ответ

1

Dataflow выполняет ваш код в связках. После успешного выполнения каждый пакет стремится избежать повторного выполнения на успешно обработанных элементах. Связки не обязательно выполняются между каждым шагом в конвейере. См. the description of fusion optimization для получения информации о том, когда материализованные и совершенные компоненты PCollections.

Для PubSub сообщения, которые были прочитаны как часть пакета, будут признаны как часть завершения завершения этого пакета. Это означает, что если вы посмотрите на шаг PubSub и все ParDo s после него, они будут выполнены (и зафиксированы) вместе.

Добавление GroupByKey после того, как PubSub чтение позволяет сообщения, которые будут признаны PubSub как только пучки привержены GroupByKey.