У меня есть сценарий Beam, работающий в GCP Dataflow. Этот поток данных выполняет следующие шаги:
- Чтение ряда файлов, зашифрованных PGP. (Общий размер более 100 ГБ, отдельные файлы имеют размер 2 ГБ)
- Расшифруйте файлы, чтобы сформировать коллекцию PCollection
- Выполните wait () на PCollection
- Сделайте некоторая обработка каждой записи в коллекции PCollection перед записью в выходной файл
Поведение, наблюдаемое с потоком данных GCP:
- При чтении входных файлов и дешифровании файлов запускается с одним рабочим, а затем масштабируется до 30 рабочих. Но только один воркер продолжает использоваться, загрузка всех остальных воркеров составляет менее 10%
- Первоначально при расшифровке пропускная способность составляла 150 тыс. Записей в секунду. Итак, 90% дешифровки выполняется за 1 час, и это хорошо. Но затем пропускная способность постепенно снижается, даже до 100 записей в секунду. Итак, для выполнения оставшихся 10% рабочей нагрузки требуется еще 1-2 часа.
Есть идеи, почему рабочие не используются? Если нет использования, почему они не уменьшаются? Здесь я без надобности плачу за большое количество виртуальных машин :-(. Во-вторых, почему пропускная способность замедляет сокращение к концу и тем самым значительно увеличивает время завершения?