Apache Flink на собеседовании Data Engineer
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем разбирать на собесе
Flink — пуrest streaming engine. На собесе DE: «отличие от Spark Streaming», «event time semantics».
True streaming
Flink обрабатывает event-by-event (не micro-batching как Spark).
Преимущества:
- Lowest latency (< 100 ms).
- Native event-time processing.
- Continuous flow без artificial batch boundaries.
Минусы:
- Сложнее dev / ops.
- Меньшее adoption vs Spark.
Event time vs processing time
Event time. Когда event произошёл в реальном мире.
Processing time. Когда event обрабатывается системой.
Они различаются — events опаздывают, переупорядочиваются.
Flink — first-class event time. Большинство стриминг operations используют event time.
stream.assignTimestampsAndWatermarks(
WatermarkStrategy.<Event>forBoundedOutOfOrderness(Duration.ofSeconds(5))
.withTimestampAssigner((event, ts) -> event.timestamp)
);Watermarks
Watermark = «event time не позже X не появятся».
Flink использует watermarks для:
- Запуск window aggregations (когда window closed).
- Cleanup state.
Watermark = max(event_time) - max_out_of_ordernessЕсли max_out_of_orderness = 10s, watermark = max event time - 10s. Events позже watermark — late.
State и checkpoints
State — данные между events (counts, joins, aggregations). Может быть огромным.
Flink supports:
- Operator state — per task slot.
- Keyed state — per key.
- Broadcast state.
State backends:
- HashMapStateBackend — in-memory, быстро.
- EmbeddedRocksDBStateBackend — on disk, для больших state.
Checkpoints. Periodically snapshot state для recovery. Async, без stop-the-world.
env.enableCheckpointing(60_000); // каждую минутуПри сбое — restart с last checkpoint.
Exactly-once
Flink даёт exactly-once гарантии при:
- Source replayable (Kafka with offsets).
- Sink supports transactions (Kafka transactional, Iceberg, JDBC two-phase commit).
- Checkpoints enabled.
Aligned vs unaligned checkpoints. Aligned — стандарт, ждёт all messages. Unaligned — для backpressure случаев, быстрее.
Flink vs Spark Streaming
| Flink | Spark Structured Streaming | |
|---|---|---|
| Model | True streaming | Micro-batch |
| Latency | < 100ms | ≥ 1s |
| Event time | Native | Native (с 2.2) |
| API maturity | Java, Scala | Python (PySpark), Java, Scala |
| Adoption | Lower | Higher |
| Batch | Через DataStream API | First-class |
В РФ: Spark предпочитают (больше специалистов). Flink — nichemarket (Yandex.Travel, Avito).
Связанные темы
- Spark Structured Streaming для DE
- Kafka на собесе DE
- Kafka Streams для DE
- Lambda и Kappa архитектура для DE
- Подготовка к собесу Data Engineer
FAQ
Flink в Python работает?
PyFlink есть, но менее зрелый, чем PySpark. На production обычно Java / Scala.
Это официальная информация?
Нет. Статья основана на документации Apache Flink.
Тренируйте Data Engineering — откройте тренажёр с 1500+ вопросами для собесов.