У меня есть потоковый конвейер в Apache Beam 2.5, который подписывается на подписку PubSub, анализирует CSV-файлы, полученные как сообщения из этой подписки, применяет некоторую тривиальную обработку к данным, а затем сохраняет результаты в BigQuery.
Иногда производитель данных, отправляемых в тему PubSub, изменяет формат файла CSV (столбцы добавляются / удаляются / переименовываются), не сообщая нам. Когда это происходит, DoFn синтаксического анализа CSV (к счастью) начинает терпеть неудачу, и конвейер застревает, повторяя обработку элемента (системное отставание конвейера начинает монотонно увеличиваться).
Документация Google поощряет использование функциональности «Слив» как «приятного» способа остановки конвейера, подчеркивая, что таким образом элементы «в полете» не рискуют потеряться . Означает ли это, что все элементы в полете, даже неисправные, будут «зафиксированы», когда их пакет закроется, что вызовет ACK для PubSub?
В моем случае я бы хотел, чтобы отказавший элемент НЕ был подтвержден ACK, чтобы после исправления конвейера сбойный элемент обрабатывался при доставке.