Apache Flink на собеседовании Data Engineer

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — 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.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

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 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).

Связанные темы

FAQ

PyFlink есть, но менее зрелый, чем PySpark. На production обычно Java / Scala.

Это официальная информация?

Нет. Статья основана на документации Apache Flink.


Тренируйте Data Engineering — откройте тренажёр с 1500+ вопросами для собесов.