Чем отличаются batch и streaming обработки данных?

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

Batch обработка данных (пакетная обработка)

Определение

Batch-обработка — это метод, при котором данные собираются в пакеты (батчи) за определённый промежуток времени и обрабатываются все вместе как единое целое. Процесс обработки запускается по расписанию или по накоплению определённого объёма данных.

Пример

  • Система загружает заказы за весь день и ночью обрабатывает их для расчёта отчётов или метрик.

Ключевые характеристики

  • Отложенная обработка: данные не обрабатываются сразу, а накапливаются.

  • Большие объёмы данных: эффективно работает при обработке миллионов записей.

  • Время выполнения: может занимать минуты или даже часы.

  • Используется в DWH, BI, ETL, отчетности.

  • Часто реализуется с использованием SQL, Spark, Hadoop, Airflow, dbt.

  • Не требует постоянного соединения с источниками данных.

Преимущества

  • Простота реализации и отладки.

  • Хорошо масштабируется на больших объёмах.

  • Подходит для сложной трансформации, агрегации и джойнов.

  • Эффективная загрузка в Data Warehouse.

Недостатки

  • Не подходит для задач, где важна задержка (latency).

  • Трудно применимо для событийных (event-driven) сценариев.

  • Больше времени между событием и результатом (от нескольких минут до часов).

Streaming обработка данных (потоковая обработка)

Определение

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

Пример

  • Обработка кликов пользователя на сайте в реальном времени для персонализированной рекламы.

Ключевые характеристики

  • Обработка "на лету": данные обрабатываются по мере поступления.

  • Малые порции данных: каждая запись или событие обрабатываются индивидуально или небольшими группами.

  • Низкая задержка (low-latency): от миллисекунд до нескольких секунд.

  • Поддерживает event-driven архитектуры.

  • Инструменты: Apache Kafka, Apache Flink, Spark Structured Streaming, Apache Beam, AWS Kinesis, Azure Stream Analytics.

Преимущества

  • Реактивность: позволяет мгновенно реагировать на события.

  • Подходит для сценариев мониторинга, обнаружения мошенничества, IoT.

  • Высокая доступность и масштабируемость при правильной архитектуре.

Недостатки

  • Сложность реализации и поддержки.

  • Требует высоконадежной инфраструктуры.

  • Ошибки в логике могут быть трудноуловимыми.

  • Нужно учитывать порядок, дедупликацию, оконные функции.

Сравнение Batch vs Streaming

Характеристика Batch Processing Streaming Processing
Скорость обработки Минуты / часы Миллисекунды / секунды
--- --- ---
Подход к обработке Обработка накопленных данных Обработка по мере поступления
--- --- ---
Объём данных Большие пакеты Отдельные события или малые партии
--- --- ---
Сложность реализации Ниже Выше
--- --- ---
Возможности анализа Глубокий аналитический анализ Быстрая аналитика, но часто упрощённая
--- --- ---
Пример инструментов Apache Airflow, Spark, Hadoop, dbt Kafka, Flink, Spark Streaming, Kinesis
--- --- ---
Типичные задачи Генерация отчётов, загрузка в DWH Мониторинг, алерты, реакция на события
--- --- ---
Формат обработки Статичная обработка Потоковая, с поддержкой окон и задержек
--- --- ---
Хранение состояния Обычно без хранения состояния Часто требует сохранения состояния потоков
--- --- ---

Использование окон в стриминге

Для агрегаций в стриминге часто применяются оконные функции:

  • Tumbling windows — фиксированные окна (например, каждую минуту).

  • Sliding windows — перекрывающиеся окна (например, каждые 30 сек, но длина окна — 2 минуты).

  • Session windows — окна по сессиям активности пользователя.

Архитектурные подходы

Lambda Architecture

Сочетает batch и streaming-подходы:

  • Batch Layer — обрабатывает данные медленно, но надёжно и точно.

  • Speed Layer — обрабатывает те же данные быстро, но с возможной погрешностью.

  • Serving Layer — объединяет результаты двух слоёв.

Kappa Architecture

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

Реальные кейсы

Batch:

  • Генерация ежедневных отчётов о продажах.

  • Периодическая загрузка данных из CSV или базы в хранилище.

  • Обработка логов за сутки.

Streaming:

  • Обнаружение подозрительных транзакций в режиме реального времени.

  • Слежение за датчиками в IoT-устройствах.

  • Обновление панели мониторинга (dashboard) с задержкой в 1–2 секунды.

Когда что использовать

Batch:

  • Когда данные поступают нерегулярно.

  • Когда не требуется мгновенного ответа.

  • Когда важнее точность, чем скорость.

  • Когда проще писать и поддерживать.

Streaming:

  • Когда важна скорость реакции.

  • Когда необходимо обрабатывать события в реальном времени.

  • Когда архитектура построена на событиях (event-driven).

  • Когда требуется постоянно обновляемая аналитика.

Оба подхода могут сосуществовать в одной системе. Например, стриминг используется для предварительной обработки и триггеров, а batch — для регулярной очистки, валидации и загрузки в хранилище. Выбор зависит от задачи, бизнес-требований, объёма данных и зрелости команды.