При использовании Dataflow и текущей реализации PubSubIO достижение доставки хотя бы один раз зависит от того, доступно ли состояние контрольной точки. Вы должны всегда истощать свой трубопровод при отмене; в противном случае состояние контрольной точки может быть потеряно. Если целый регион стал недоступен, и вам нужно было запустить задание в другом регионе, я считаю, что это было бы равносильно отмене конвейера без опустошения.
У нас есть несколько простых потоковых конвейеров потока данных, которые читают из PubSub и запись в PubSub без вызова GroupByKey, поэтому состояние контрольной точки не затрагивается, и сообщения принимаются только после доставки на выход topi c.
У нас есть другие конвейеры, которые читают из Pubsub и пишут в GCS или BigQuery. FileIO и BigQueryIO включают в себя несколько операций GroupByKey, поэтому мы уязвимы для потери данных, если сообщения с контрольными точками отбрасываются. У нас было несколько случаев, когда эти трубопроводы попадали в неисправимое состояние, которое требовало отмены. В этом сценарии ios нам пришлось засыпать часть данных с более раннего этапа нашей архитектуры данных.
На данный момент Beam не предлагает решение для задержки подтверждений сообщений Pubsub через GroupByKey, поэтому вам нужно либо принять этот риск, и создать рабочие рабочие процессы, которые восстанавливают из утерянного состояния контрольной точки, или обойти проблему, отправив сообщения в другое хранилище данных за пределами Beam.