Пример ответа
1) Короткий ответ
Micro-batching — это обработка небольших пакетов данных с фиксированными интервалами, в то время как streaming — это непрерывная обработка отдельных записей или очень маленьких групп в реальном времени.
2) Сравнение архитектурных подходов:
* Модель обработки:
* Micro-batching: Данные накапливаются в небольшие батчи (1-60 секунд), затем обрабатываются как единое целое
* Streaming: Данные обрабатываются по мере поступления, record-by-record или small windows
* Задержка (Latency):
* Micro-batching: От секунд до минут (зависит от размера батча)
* Streaming: Миллисекунды до секунд (near real-time)
* Семантика доставки:
* Micro-batching: Проще обеспечить exactly-once через transactional commits
* Streaming: Требует сложных механизмов (watermarks, checkpoints) для exactly-once
3) Технологические реализации:
Spark Structured Streaming (Micro-batching):
```python
# Обработка с 30-секундными микробатчами
query = (df.writeStream
.format("console")
.outputMode("update")
.trigger(processingTime='30 seconds') # Фиксированный интервал
.start())
```
Apache Flink (True Streaming):
```java
// Непрерывная обработка с event time
DataStream<Event> stream = env
.addSource(new KafkaSource())
.keyBy(Event::getUserId)
.window(TumblingEventTimeWindows.of(Time.seconds(30)))
.process(new MyProcessFunction());
```
4) Сравнение производительности:
* Throughput:
* Micro-batching: Выше за счет батч-оптимизаций
* Streaming: Ниже из-за overhead на каждую запись
* Resource Utilization:
* Micro-batching: Более предсказуемое использование ресурсов
* Streaming: Может требять больше памяти для state management
Рекомендация: Используйте micro-batching для аналитических workload с умеренными требованиями к задержке. Выбирайте true streaming для real-time use cases (мониторинг, alerting, real-time рекомендации).
5) Практические use cases:
* Micro-batching подходит для:
* Ежечасная/ежедневная агрегация метрик
* ETL-пайплайны с умеренными SLA
* Обработка логов для аналитических дашбордов
* True streaming требуется для:
* Fraud detection в реальном времени
* Real-time персонализация
* IoT телеметрия и мониторинг
6) Follow-up вопросы:
* Как выбрать оптимальный размер микробатча?
* Ответ: Баланс между latency и throughput: меньшие батчи → lower latency, но higher overhead
* Какие challenges у true streaming?
* Ответ: Out-of-order events, state management, backpressure handling
7) Практический совет (2 шага на неделю):
1. Проанализируйте требования к задержке: Определите максимально допустимую задержку для ваших use cases — это основной критерий выбора.
2. Протестируйте оба подхода: Реализуйте один и тот же пайплайн в Spark Structured Streaming (micro-batching) и Apache Flink/Kafka Streams (streaming) для сравнения производительности.