28 июня 2022 года в сотрудничестве с сообществом разработчиков Apache Spark компания Databricks анонсировала проект Lightspeed, новое поколение этого потокового движка. Читайте далее, что это такое и чем оно отличается от классического Apache Spark Structured Streaming.
Потоковая обработка данных с Apache Spark Structured Streaming
Потоковая передача событий весьма востребована современным бизнесом: это основа для принятия быстрых решений на огромных объемах входящих данных, генерируемых различными источниками. Обработка потоковых данных также технически сложна, и ее потребности намного отличаются и более сложны, чем в случае пакетных приложений. Для удовлетворения потребностей в потоковой обработке данных в Apache Spark 2.0 была введена структурированная потоковая передача. Spark Structured Streaming — это масштабируемый и отказоустойчивый механизм обработки потоков, построенный на основе механизма Spark SQL. Разработчик распределенного приложения может выразить логику с помощью SQL-запросов или Dataset/DataFrame API. Движок сам заботится о постепенном и непрерывном запуске конвейера и обновляет окончательный результат по мере поступления потоковых данных. Spark Structured Streaming широко применяется в тысячах организаций, обрабатывая более 1 ПБ данных ежедневно на одной только платформе Databricks.
Основное преимущество Spark Structured Streaming в том, что она использует тот же API, что и пакетная обработка структуры данных DataFrame в этом фреймворке, что значительно упрощает переход к вычислениям в реальном времени. Разработчик может просто написать вычисление с DataFrame, используя Python, SQL, Scala или R, и движок запустит этот код как приложение с инкрементной потоковой передачей. Затем вычисление будет выполняться поэтапно по мере поступления новых данных и автоматически восстанавливаться после сбоев с семантикой строго однократной доставки, выполняя ту же реализацию механизма, что и пакетное вычисление, что дает согласованные результаты. Это снижает сложность, устраняет возможность расхождения между пакетными и потоковыми рабочими нагрузками, снижая стоимость операций, а также инфраструктуры хранения и обработки данных. Кроме того, многие другие встроенные библиотеки Spark можно вызывать в контексте потоковой передачи, включая библиотеки машинного обучения.
Spark Structured Streaming обеспечивает отказоустойчивость и восстановление: контрольные точки устанавливаются автоматически во время обработки, позволяя приложению автоматически восстанавливаться из предыдущего состояния. Восстановление после сбоя происходит очень быстро, поскольку оно ограничено неудачными задачами, в отличие от перезапуска всего конвейера потоковой передачи в других системах. Кроме того, отказоустойчивость с использованием воспроизводимых источников и идемпотентных приемников обеспечивает сквозную семантику строго однократной доставки. Структурированная потоковая передача обеспечивает очень высокую пропускную способность с секундной задержкой при меньших затратах, используя все преимущества оптимизации производительности в механизме Spark SQL. Система также может настраиваться в зависимости от предоставляемых ресурсов, компенсируя стоимость, пропускную способность и задержку, а также поддерживая динамическое масштабирование работающего кластера, в отличие от систем, требующих предварительного выделения ресурсов.
Наконец, Spark Structured Streaming позволяет применять произвольную логику и операции к выходным данным потокового запроса с помощью метода foreachBatch(), что позволяет выполнять операции вставки, запись в несколько приемников и взаимодействие с внешними источниками данных. Наконец, структурированная потоковая передача Apache Spark поддерживает stateful-вычисления с поддержкой агрегатов и соединений с отслеживанием состояния, а также водяных знаков для обработки ограниченного состояния и позднего порядка. Кроме того, начиная с версии начиная с Spark 3.2 произвольные операции с отслеживанием состояния с [flat]mapGroupsWithState, поддерживаемые хранилищем состояний RocksDB, обеспечивают эффективное и отказоустойчивое управление состоянием.
Однако, несмотря отмеченные достоинства Spark Structured Streaming, эта библиотека все же имеет некоторую задержку, выполняя обработку данных в режиме близком к реальному времени, но не настолько быстро, как это делают Apache Storm или Flink. Поэтому компания Databricks, которая занимается коммерциализацией Apache Spark, решили развивать этот движок потоковой обработки Big Data в рамках нового проекта Lightspeed, о котором мы поговорим далее.
Что такое Lightspeed от Databrics
Структурированная потоковая передача Apache Spark обеспечивает сбалансированную производительность по пропускной способности, задержке и стоимости. Чтобы оптимизировать задержку «последней мили» почти в 2 раза, Databricks профилирует рабочие нагрузки своих клиентов, по следующим направлениям:
- управление смещением — эксперименты показывают, что операции управления смещением занимают до 30–50% времени конвейеров обработки данных. Эти потери на сервисные операции можно снизить, сделав их асинхронными и с настраиваемой частотой, тем самым уменьшив задержку. Подробнее об этом читайте в нашей новой статье.
- асинхронные контрольные точки — текущий механизм контрольной точки синхронно записывает данные в хранилище объектов после обработки группы записей, что увеличивает задержку. Эти временные потери можно улучшить на целых 25%, перекрывая выполнение следующей группы записей записью контрольной точки для предыдущей группы.
- частота контрольных точек состояния — Spark Structured Streaming проверяет состояние после обработки группы записей, что также увеличивает сквозную задержку. Если вместо этого сделать частоту контрольных точек stateful-приложения настраиваемым для проверки каждой N-й группы, задержка может быть дополнительно уменьшена в зависимости от выбора периода N.
Также разработчики Databricks планируют дополнительно расширить функциональные возможности Spark Structured Streaming в рамках проекта Lightspeed по следующим направлениям:
- несколько stateful-операторов – сейчас структурированная потоковая передача поддерживает только один оператор с отслеживанием состояния для каждого задания. Но иногда нужно несколько операторов состояния, например, при агрегации цепочек временных окон с разным временным периодом, сложных внешних соединениях потоковых таблиц или объединение временного интервала между потоками с последующей агрегацией временных окон.
- расширенное управление окнами — добавление в API поддержки произвольных групп оконных элементов, определения общей логики обработки для окна, условная логика запуска обработки данных, с вытеснением элементов окна до или после ее применения.
- управление состоянием — поддержка состояния обеспечивается с помощью предопределенных агрегаторов и соединений с помощью специализированных API. Эта новая функциональная возможность в Lightspeed будет включать эволюцию схемы состояния по мере изменения логики обработки и возможность запрашивать состояние извне.
- асинхронный ввод-вывод. Часто в ETL-конвейерах возникает необходимость соединения потока с внешними базами данных и микросервисами. Проект Lightspeed представит новый API, который управляет подключениями к внешним системам и пакетными запросами, обрабатывая их асинхронно.
- Расширение Python API для stateful-обработки, включая функции хранения и управления состоянием. Также Lightspeed обеспечит более тесную интеграцию с популярными пакетами обработки данных Python, такими как Pandas, чтобы облегчить работу разработчиков и специалистов по Machine Learning.
- Новые коннекторы для обработки данных и их записи в различные шины обмена сообщениями, такие как Apache Kafka, и системы хранения, такие как Delta Lake. В рамках проекта Lightspeed будут добавлены новые коннекторы, в частности, для Google Pub/Sub, Amazon DynamoDB и других провайдеров, чтобы разработчики могли легко использовать механизм Spark Structured Streaming с дополнительными шинами обмена сообщениями и системами хранения. Также в существующие коннекторы будут добавлены новые функции и улучшены существующие характеристики, к примеру, производительность. Будет реализована поддержка аутентификации AWS IAM в коннекторе к Apache Kafka и расширенная поддержка ветвлений в коннекторе к Amazon Kinesis.
Задания структурированной потоковой передачи выполняются непрерывно, пока не будут явно остановлены. Поэтому администратору кластера и дата-инженеру необходимо иметь соответствующие инструменты и показатели для мониторинга, отладки и генерации оповещений при превышении определенных пороговых значений. Чтобы упростить эти процессы, в проекте Lightspeed планируется улучшить наблюдаемость Apache Spark Streaming, в текущей версии которого метрики, генерируемые конвейерами, требуют специального кодирования для сбора и визуализации. Разработчики Databrikcs собираются унифицировать механизм сбора метрик и предоставить возможность их экспорта в разные системы и форматы. А также будут добавлены дополнительные показатели для устранения неполадок. Наконец, будут реализованы новые возможности визуализации конвейеров и того, как их операторы сгруппированы и сопоставлены с задачами, а также с исполнителями, на которых они выполняются. Кроме того, ожидается возможность детализации до конкретных исполнителей, просмотра их логов и различных показателей.
Освойте администрирование и использование Apache Spark для задач дата-инженерии, разработки распределенных приложений и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
- Основы Apache Spark для разработчиков
- Анализ данных с Apache Spark
- Потоковая обработка в Apache Spark
- Машинное обучение в Apache Spark
- Графовые алгоритмы в Apache Spark
Источники