Я создал простой конвейер потока данных, который считывает байтовые массивы из pubsub, открывает их окна и записывает в текстовый файл в GCS. Я обнаружил, что с темами с меньшим трафиком это работает отлично, однако я запустил его на тему, которая занимает около 2,4 ГБ в минуту, и некоторые проблемы начали возникать.
При запуске трубопровода я не устанавливал количество рабочих (поскольку я предполагал, что оно будет автоматически масштабироваться по мере необходимости). При приеме этого объема данных число работников оставалось равным 1, но TextIO.write () занимало 15+ минут, чтобы написать 2-минутное окно. Это будет продолжаться до тех пор, пока не закончится память. Есть ли веская причина, по которой Dataflow не выполняет автоматическое масштабирование, когда этот шаг создается из резервной копии?
Когда я увеличил количество рабочих до 6, время записи файлов начиналось примерно с 4 минут в течение 5-минутного окна, а затем уменьшалось до 20 секунд.
Кроме того, при использовании 6 рабочих может возникнуть проблема с вычислением времени на стене? Кажется, что мой никогда не выключается, даже если поток данных перехватил и после 4 часов работы мое резюме для шага записи выглядело так:
Step summary
Step name: Write to output
System lag: 3 min 30 sec
Data watermark: Max watermark
Wall time: 1 day 6 hr 26 min 22 sec
Input collections: PT5M Windows/Window.Assign.out0
Elements added: 860,893
Estimated size: 582.11 GB
ID задания: 2019-03-13_19_22_25-14107024023503564121