Пакетная обработка и потоковая передача данных в Azure Databricks

Пакетная обработка и потоковая передача — это две семантики обработки данных, используемые для рабочих нагрузок проектирования данных, включая прием, преобразование и обработку в режиме реального времени.

Потоковая передача обычно ассоциируется с низкой задержкой и непрерывной обработкой через системы обмена сообщениями, такие как Apache Kafka.

Однако в Azure Databricks он имеет более обширное определение. Базовый механизм конвейеров Lakeflow (Apache Spark и структурированная потоковая передача) имеет единую архитектуру для пакетной и потоковой обработки:

  • Модуль может рассматривать такие источники, как облачное хранилище объектов и Delta Lake , как источники потоковой передачи для эффективной добавочной обработки.
  • Потоковая обработка может выполняться в триггерном или непрерывном режиме, обеспечивая гибкость в управлении затратами и производительностью для стриминговых рабочих нагрузок.

Ниже приведены основные семантические различия между пакетной и потоковой обработкой, включая их преимущества и недостатки, и соображения по их выбору для ваших рабочих нагрузок.

Семантика пакетной обработки

При пакетной обработке подсистема не отслеживает, какие данные уже обрабатываются в источнике. Все данные, доступные в настоящее время в источнике, обрабатываются во время обработки. На практике источник пакетных данных обычно секционируется логически, например по дням или регионам, чтобы ограничить обработку данных.

Например, вычисление средней цены продажи товара, агрегированное по часовой детализации, для мероприятия по продажам, проводимого компанией электронной коммерции, можно запланировать как пакетную обработку, чтобы вычислять среднюю цену продаж каждый час. При пакетной обработке данных из предыдущих часов каждый час выполняется повторная обработка, а ранее вычисляемые результаты перезаписываются для отражения последних результатов.

Пакетная обработка

Семантика потоковой передачи

При потоковой обработке подсистема отслеживает обработку данных и обрабатывает только новые данные в последующих запусках. В приведенном выше примере можно запланировать потоковую обработку вместо пакетной обработки, чтобы вычислить среднюю цену продаж каждый час. При потоковой передаче только новые данные, добавленные в источник с момента последнего выполнения, обрабатываются. Новые вычисляемые результаты должны быть добавлены к ранее вычисляемым результатам, чтобы проверить полные результаты.

Потоковая обработка

Пакетная передача и потоковая передача

В приведенном выше примере потоковая передача лучше пакетной обработки, так как она не обрабатывает те же данные, обработанные в предыдущих запусках. Однако потоковая обработка становится более сложной с сценариями, такими как устаревшие и поздние данные прибытия в источнике.

Пример позднего поступления данных: некоторые данные о продажах за первый час поступают в систему только ко второму часу.

  • При пакетной обработке данные, поступившие с опозданием в течение первого часа, обрабатываются вместе с данными за второй час и имеющимися данными за первый час. Предыдущие результаты за первый час перезаписываются и корректируются на основе данных, поступивших с задержкой.
  • При потоковой обработке данные за первый час, поступившие с опозданием, обрабатываются отдельно от остальных уже обработанных данных за первый час. Логика обработки должна хранить сведения о сумме и подсчете данных из средних вычислений первого часа, чтобы правильно обновить предыдущие результаты.

Эти сложности потоковой передачи обычно возникают при обработке с учетом состояния, таких как соединения, агрегации и дедупликации.

Для потоковой обработки без состояния, например добавления новых данных из источника, обработка неупорядоченных и поздно поступающих данных менее сложна, так как данные, поступающие с задержкой, можно добавлять к предыдущим результатам по мере поступления данных из источника.

В таблице ниже описаны преимущества и минусы пакетной и потоковой обработки, а также различные функции продукта, поддерживающие эти две семантики обработки в Databricks Lakeflow.

Семантика обработки Плюсы Минусы Продукты проектирования данных
Партия
  • Логика обработки проста.
  • Результаты всегда точны и отражают все доступные данные в источнике.
  • Это не так эффективно; данные повторно обрабатывается в определенной пакетной секции.
  • Медленнее, может обрабатывать требования к задержке от часов до минут, но не секунд или миллисекунд.
Стриминг
  • Обрабатываются только новые данные, что делает этот процесс эффективным.
  • Быстрее может обрабатывать требования к задержке от часов до минут, секунд и миллисекунд.
  • Логика обработки может быть сложной, особенно когда дело касается обработки данных с отслеживанием состояния, таких как соединения, агрегации, дедупликации и так далее.
  • Результаты не всегда могут быть точными, учитывая неупорядоченные и поздние данные о прибытии.

Рекомендации

В таблице ниже описана рекомендуемая семантика обработки на основе характеристик рабочих нагрузок обработки данных на каждом уровне архитектуры медальона.

Слой медальона Характеристики рабочей нагрузки Рекомендация
Бронза
  • Рабочие нагрузки загрузки данных.
  • Обычно не требует или предполагает обработку без состояния для постепенного добавления из источников данных.
  • Размер данных обычно больше.
  • Потоковая обработка обычно является лучшим выбором, учитывая, что пользователи могут воспользоваться преимуществами потоковой передачи, но не быть подверженными сложностям потоковой обработки с отслеживанием состояния.
Серебро
  • Нагрузки рабочих процессов преобразования.
  • Как правило, включает как обработку без сохранения состояния, например, фильтрация, и обработку с сохранением состояния, например, соединения, агрегаты и дедупликации.
  • Используйте пакетную обработку (с добавочным обновлением в материализованных представлениях).
  • Используйте потоковую обработку в качестве варианта для вариантов использования, когда эффективность и задержка гораздо важнее, чем точность результатов. Учитывайте сложности, представленные обработкой потоковой передачи с отслеживанием состояния.
Золото
  • Нагрузки на заключительном этапе агрегирования.
  • Обычно включает обработку с сохранением состояния: например, соединения и агрегации.
  • Размер данных обычно меньше.