#apache-spark #spark-structured-streaming
#apache-spark #искровая структурированная потоковая передача
Вопрос:
Мы планируем внедрить приложение Spark Structured Streaming, которое будет потреблять непрерывный поток данных: эволюция значения показателя с течением времени. Это потоковое приложение будет работать с размером окна в 7 дней (и скользящим окном), чтобы часто вычислять среднее значение показателя за последние 7 дней.
1- Будет ли Spark сохранять все эти 7 дней данных (что сильно повлияет на объем потребляемой памяти), ИЛИ Spark непрерывно вычисляет и обновляет среднее запрошенное (а затем избавляется от обработанных данных) и, таким образом, не влияет на объем потребляемой памяти (не сохраняя данные за 7 дней)?
2- В случае, если ответ на первый вопрос заключается в том, что эти 7 дней данных сохраняются, предотвращает ли использование водяного знака это сохранение? Допустим, у нас есть водяной знак в 1 час; будет ли сохраняться только 1 час данных в Spark, ИЛИ в памяти spark все еще сохраняется 7 дней, а водяной знак здесь только для игнорирования новых данных, поступающих с меткой datatimestamp старше 1 часа?
Ответ №1:
Размер окна 7, безусловно, является значительным, но он также зависит от объема поступающих потоковых данных / записей. Хитрость заключается в том, как использовать длительность окна, интервал обновления, режим вывода и, при необходимости, водяной знак (если это не влияет на бизнес-правило)
1- Если потоковая передача настроена на размер окна с уменьшением (т. Е. Длительность окна совпадает с продолжительностью обновления), в режиме complete вы можете в конечном итоге хранить полные данные в памяти в течение 7 дней. Однако, если вы настроите длительность окна на 7 дней с обновлением каждые x минут, агрегированные данные будут вычисляться каждые x минут, и в памяти будут храниться только данные о результатах. Следовательно, посмотрите на параметры window API и настройте способ получения результатов.
2- Водяной знак приводит к другому поведению и игнорирует записи до истечения срока действия водяного знака и обновляет таблицы результатов после того, как каждая микропакета пересекает время водяного знака. Если ваше бизнес-правило позволяет включать вычисление водяных знаков, его тоже можно использовать.
Полезно подробно ознакомиться с API, режимами вывода и использованием водяных знаков по ссылке enter описание здесь, это поможет выбрать правильную комбинацию.