Потоки и пакеты: сходства, отличия и примеры применения

Автор Категория
Потоки и пакеты: сходства, отличия и примеры применения

Сегодня рассмотрим 2 основные категории технологий обработки данных: пакетную и потоковую. Что общего между batch и stream processing, где они применяются, какими технологиями поддерживаются, можно ли их использовать вместе и как это сделать: ликбез по архитектуре больших данных.

Потоковая и пакетная обработка: краткий обзор с примерами

Обработки данных в режиме реального времени сегодня становится почти стандартом де-факто. Бизнесу важно выполнять вычисления «на лету», получая ценную информацию, пока данные все еще актуальны. Это стало возможно благодаря технологиям потоковой обработки событий, которые поддерживают такие инструментальные средства как Apache Kafka, Flink, NiFi, Storm, Spark Structured Streaming и основанные на них платформы. С этими технологиями финтех-компании могут обнаруживать мошенничества в режиме реального времени, ритейл получает 360-градусный обзор клиентских действий, а провайдеры облачных услуг предупреждают программные и инфраструктурные сбои еще до того, как пользователи столкнутся с простоями.

Изначально аналитических и транзакционных систем использовали пакетные технологии, когда синхронизация накопленных за день данных выполнялась ночью. Поэтому фактические данные отличались от расчетных на 8-12 часов, что может быть критичным для ряда доменов. Хотя современные пакетные технологии значительно повысили частоту обработки пакетов, на вычисления с большим набором данных до сих пор могут уйти часы, а результаты по-прежнему не будет на 100% соответствовать действительности. Кроме того, разные системы, основанные на разных графиках обработки пакетов, могут давать противоречивые и несогласованные вычисления.

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

Потоковая обработка основана на следующих ключевых аспектах:

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

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

Чтобы наглядно продемонстрировать некоторые сценарии потоковой обработки событий, рассмотрим самые популярные из них:

  • потоковые ETL-процессы, где преобразования выполняются сразу же после поступления данных и могут использоваться для аналитики и визуализации в реальном времени, обеспечивая актуальность информации в любой момент.
  • транспорт – беспилотники и автомобили используют множество датчиков, бортовые вычислительные мощности и беспроводные соединения для автономного вождения, автоматические оповещения о дорожном движении, обнаружение аномалий для запроса сервисных вызовов, а также персонализация на основе моделей использования и привычек вождения.
  • обнаружение аномалий и мошенничества, когда финансовые учреждения могут проверять ненормальную активность в истории транзакций по кредитным картам, чтобы обнаруживать неправомерные действия. Делая это в режиме реального времени до того, как транзакция будет зафиксирована, банки могут предотвращать мошенничество в режиме реального времени вместо запоздалой реакции на уже случившееся преступление постфактум.
  • предиктивная аналитика, когда исход ситуации можно предсказать на основе текущей последовательности событий. Например, в обрабатывающей промышленности потоковые данные используются для получения ключевых показателей работающего оборудования в режиме реального времени, чтобы прогнозировать сбой до того, как он произойдет, предотвращая потерю продукта и снижая затраты на техническое обслуживание.
  • многопользовательские онлайн-игры, когда сотни тысяч игроков со всего мира одновременно работают в одной платформе, а все их действия фиксируются в режиме реального времени. Это дополняется данными о локациях, анализом поведения игроков, производительности серверов и другими сопутствующими данными.

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

Потоки и пакеты: versus или вместе?

В связи с кардинальными отличиями потоковой и пакетной обработки может возникнуть впечатление, что эти 2 парадигмы радикально противоречат друг другу и не могут быть использованы совместно в рамках одной ИТ-инфраструктуры или на одном проекте. Это не совсем так. Сегодня четкая грань между разделением потоковой и пакетной парадигмы начинает стираться: пакетные системы снижают промежуток между порциями данных для обработки, а некоторые фреймворки совмещают batch и streaming технологии в одном API. Например, Apache Flink еще в релизе 1.14, выпущенном в сентябре 2021 года, сделал попытку к унификации потоковой и пакетной обработки в едином API DataStream. Подробно об этом мы писали здесь, здесь и здесь.

А Apache Kafka, хоть и позиционируется как главная распределенная платформа потоковой передачи событий, на глубинном уровне все равно оперирует пакетами, группируя все записи, поступающие между передачами запроса, в один пакет размером batch.size, если сообщения приходят быстрее, чем могут быть отправлены. Так можно регулировать пропускную способность системы, что мы рассматривали в этой статье.

Здесь же можно отметить, что Spark Streaming на самом деле реализует микропакетную технологию обработки данных, где потоковым примитивом является дискретизированный поток DStream, который обеспечивает уровень абстракции поверх необработанных данных – событий, разделенных их на блоки подобно RDD. Другая библиотека Spark, Structured Streaming еще больше приближает эту пакетную идею к потоковой, представляя поток данных в виде неограниченной по глубине таблицы, которая продолжает увеличиваться по мере поступления новых данных и непрерывно обрабатывается с помощью долго выполняющегося запроса. Похожую концепцию с таблично-потоковым дуализмом реализует уже упомянутая Apache Kafka в Kafka Streams и ksqlDB/KSQL, что мы разбирали здесь.

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

Однако, для такой миграции необходимо существенно модернизировать всю архитектуру данных и приложений. Как это сделать на практике, вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://www.confluent.io/blog/stream-processing-vs-batch-processing/
  2. https://medium.com/dataprophet/4-big-data-architectures-data-streaming-lambda-architecture-kappa-architecture-and-unifield-d9bcbf711eb9