В быстро развивающемся мире инженерии данных доминирующими, но в то же время конкурирующими подходами стали два метода: пакетная обработка и потоковая обработка. Однако на практике наилучшие результаты дает унифицированный подход, включающий в себя как пакетную, так и потоковую обработку, пишет на портале Datanami Инцзюнь Ву, основатель и генеральный директор компании RisingWave Labs.

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

Существенные различия между потоковой и пакетной обработкой

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

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

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

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

Превосходство потоковой обработки в задачах реального времени

Несмотря на то что пакетная обработка является надежной «рабочей лошадкой» в мире данных, она с трудом справляется с требованиями к свежести данных в реальном времени, особенно когда результаты должны быть получены в течение нескольких секунд или субсекунд. Для достижения более быстрых результатов при пакетной обработке пользователь может рассмотреть возможность использования средств оркестровки для планирования вычислений через регулярные промежутки времени. Использование средств оркестровки в паре с заданиями пакетной обработки через регулярные интервалы времени может быть достаточным для больших массивов данных, но для сверхбыстрых задач реального времени этого недостаточно.

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

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

Ограничения потоковой обработки и незаменимость пакетной обработки

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

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

Единый подход: сосуществование и взаимодополняемость

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

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

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

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

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

Принять синергию

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

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