Learning Platform
Глоссарий Troubleshooting
Урок 01.02 · 15 мин
Средний
PrerequisitesRoadmapCourse StructureLearning Path

Что нужно знать заранее и roadmap курса

Apache Flink — это не первый ваш инструмент в дата-инженерии. Он строится поверх привычек, которые вы выработали, работая с Kafka, реляционными базами, контейнерами. Этот урок — карта того, что у вас уже должно быть в багаже, и план из 17 модулей, который мы пройдём вместе.

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


Prerequisites

Apache Kafka на уровне пользователя

Самый важный prerequisite — практический опыт с Kafka. Курс предполагает, что вы:

  • Понимаете, что такое топик, партиция, offset, replication factor. Можете объяснить, почему партиции — единица параллелизма, и как это влияет на consumer.
  • Писали producer хотя бы раз — отправляли сообщения с ProducerRecord, понимаете роль ключа в партиционировании.
  • Писали consumer в группе — знаете, как работает rebalance, что такое committed offset, и почему enable.auto.commit=false часто правильный выбор.
  • Видели acks=all + min.insync.replicas в конфигурации и понимаете, какие гарантии это даёт.
  • Сталкивались с проблемой at-least-once доставки и понимаете, почему consumer должен быть идемпотентным.

Этого достаточно. Если что-то из списка вызывает вопросы — пройдите модули 02-03 курса kafka-course перед стартом этого курса. Там Kafka разбирается с нуля до уверенного использования.

Producer API Kafka Consumer Groups и rebalance
TIP

Самый частый пробел при переходе с Kafka на Flink — непонимание того, что Flink сам управляет offsets через свои checkpoints. KafkaSource в Flink игнорирует обычный Kafka consumer group rebalance и не делает auto-commit. Это сбивает с толку первые дни, если ожидать привычного поведения.

Java или Python на уровне production-кода

DataStream API в этом курсе разбирается на Java. Это не догма — PyFlink работает, и крупные компании его используют. Но Java — родной язык Flink, документация на нём полнее, экосистема библиотек шире, и большинство production-кода в open source примерах — Java.

От вас нужно:

  • Уверенное знание Java 17+ (Flink 2.x требует Java 17 как минимум). Лямбды, generics, records, sealed classes — обычный рабочий инструмент, а не “слышал, но не использовал”.
  • Понимание основ типов в Java — generic erasure, TypeReference, Class<T>. Это всплывёт, когда мы будем говорить о TypeInformation и сериализации в Flink.
  • Опыт с Maven или Gradle — будем собирать fat JAR для деплоя.
  • Базовая работа с CompletableFuture — пригодится в модуле 09 (Async I/O).

Если ваш основной язык — Python, и Java вы изучали только в университете: курс всё равно будет понятен. Логика и архитектура одинаковы. Code-примеры читаются как псевдокод. Но для собственных production-приложений я рекомендую либо подтянуть Java, либо выбрать другой stream processor (например, Bytewax или Faust) с более естественным Python-API.

SQL на уровне аналитика

Модули 12 (Table API и SQL), 13 (Connectors) и 14 (Flink CDC) активно используют SQL. От вас нужно:

  • Понимание SELECT, WHERE, GROUP BY, HAVING, JOIN (inner, left, right, full).
  • Знакомство с window functions (OVER, PARTITION BY) — Flink SQL расширяет их для streaming.
  • Базовое понимание типов SQL — VARCHAR vs CHAR, TIMESTAMP vs TIMESTAMP_LTZ, DECIMAL precision.

Это уровень “написал SQL для отчёта” — не “оптимизировал план выполнения с partition pruning”.

Docker и Kubernetes на уровне пользователя

Модули 03 (Setup) и 15 (Kubernetes deployment) предполагают, что вы:

  • Запускали docker compose локально, читали и правили docker-compose.yml.
  • Знаете, что такое Pod, Deployment, Service, ConfigMap в Kubernetes.
  • Применяли манифесты через kubectl apply -f и читали kubectl logs.

Опыта с CRD, операторами, custom controllers — не требуется. Flink Kubernetes Operator мы разберём с нуля.


Roadmap курса: 17 модулей

Курс разделён на 4 логических блока. Внутри каждого блока модули идут строго по порядку — каждый следующий полагается на предыдущий.

Структура курса
Блок 1: ФундаментМодули 00-03. Постановка задачи, обзор архитектуры, базовый DataStream API. К концу — можете запустить простой stateless job и понимаете job graph.
когда понятен фундамент
Блок 2: Stateful streamingМодули 04-08. Keyed state, windows, event time, watermarks, ProcessFunction, broadcast pattern. Это core competence Flink, без чего production не существует.
когда state и время освоены
Блок 3: Reliability и SQLМодули 09-12. Async I/O, checkpoints, savepoints, end-to-end exactly-once, Table API и SQL. К концу — production-ready streaming с гарантиями доставки.
когда reliability обеспечена
Блок 4: Production deploymentМодули 13-16. Production connectors, Flink CDC, Kubernetes deployment, capstone-проект. К концу — способны провести Flink-приложение от написания до прода.

Блок 1: Фундамент (модули 00-03)

Модуль 00: Введение в курс. Этот модуль — описание самого курса, prerequisites, и установка локального окружения. К концу — у вас работает Flink 2.2 в Docker, и вы запустили первый WordCount.

Модуль 01: Что такое stream processing. Концептуальный фундамент: batch vs streaming, kappa vs lambda архитектура, сравнение Flink с Spark Structured Streaming и Kafka Streams, версионная картина Flink 2026 года, анатомия Flink-job (DAG, операторы, parallelism). К концу — у вас правильная mental model перед погружением в API.

Модуль 02: Архитектура Flink. JobManager (Dispatcher, ResourceManager, JobMaster) и TaskManager, slots, deployment modes (Application, Session), job lifecycle, Web UI. Это обзор архитектуры — без deep dive в internals. К концу — понимаете, что происходит, когда вы делаете flink run.

Модуль 03: DataStream API. Source V2, transformations (map, filter, flatMap, keyBy, reduce, aggregate), Sink V2, parallelism и partitioning стратегии, serialization (POJO/Tuple/Avro/Kryo). Это базовый рабочий инструмент Flink. К концу — пишете stateless и простые stateful jobs.

Блок 2: Stateful streaming (модули 04-08)

Модуль 04: KeyedStream и keyed state. ValueState, ListState, MapState, ReducingState, AggregatingState. TTL для state. State backends (HashMap, RocksDB, ForSt) — обзор. Stateful patterns: counter, deduplication, joining streams. К концу — пишете stateful operators с правильным state management.

Модуль 05: Windows. Tumbling, sliding, session windows. WindowAssigner, Trigger, Evictor, WindowFunction (ProcessWindowFunction, ReduceFunction, AggregateFunction). Allowed lateness. К концу — умеете решать задачи “посчитать что-то за окно” корректно.

Модуль 06: Event time и watermarks. Event time vs processing time vs ingestion time. WatermarkStrategy, WatermarkGenerator. Late events, idle sources, alignment. Это самая концептуально сложная часть Flink — и самая важная для корректных результатов на потоковых данных. К концу — понимаете, почему ваше окно “не закрывается” и как это исправить.

Модуль 07: ProcessFunction и timers. KeyedProcessFunction, registerEventTimeTimer, registerProcessingTimeTimer, OnTimerContext. Side outputs. Это low-level API, дающий полный контроль. К концу — умеете писать произвольную stateful логику, недоступную через window API.

Модуль 08: Operator state и broadcast pattern. Operator state (ListState, UnionListState), checkpoint/restore для не-keyed state. Broadcast state pattern — динамическая конфигурация и enrichment без перезапуска job. К концу — умеете решать задачи “правила меняются on-the-fly без рестарта”.

Блок 3: Reliability и SQL (модули 09-12)

Модуль 09: Async I/O. AsyncFunction, ordered vs unordered, timeout, retry. Когда synchronous lookup в HTTP/DB убивает throughput, async I/O — спасение. К концу — умеете обогащать поток данных внешними системами без блокировки.

Модуль 10: Checkpoints и savepoints. Чем checkpoint отличается от savepoint, аligned vs unaligned checkpoints, incremental checkpoints в RocksDB, externalized checkpoints. Savepoint-driven upgrades. К концу — понимаете, как Flink обеспечивает fault tolerance без потери data.

Модуль 11: End-to-end exactly-once. Two-phase commit protocol в sinks. TransactionalKafkaSink. Идемпотентные sinks (JDBC, S3, Iceberg). Что значит “exactly-once” на уровне всей системы. К концу — умеете строить pipelines с реальными exactly-once гарантиями.

Модуль 12: Table API и SQL. Dynamic tables, continuous queries, append vs upsert vs retract streams. Streaming JOINs (regular, interval, temporal, lookup). Windowing в SQL. TVF (table-valued functions). К концу — знаете, когда SQL быстрее DataStream, и используете его правильно.

Блок 4: Production deployment (модули 13-16)

Модуль 13: Connectors в production. Kafka, JDBC, Iceberg, Hudi, FileSystem (S3, GCS, Azure). Конфигурация для production — partitions, parallelism, watermark alignment. Связки connector + format (Avro, JSON, Protobuf). К концу — собираете production connectors уверенно.

Модуль 14: Flink CDC. Postgres logical replication, MySQL binlog, MongoDB change streams, SQL Server change tracking. Snapshot + binlog mode. Schema evolution. Pipeline assembling: source-to-sink CDC pipelines в YAML. К концу — строите CDC из реляционной БД в lakehouse или OLAP-склад.

Модуль 15: Deployment на Kubernetes. Flink Kubernetes Operator: FlinkDeployment CRD, HA через Kubernetes API server, savepoint-driven upgrades, autoscaling. Native Kubernetes vs Operator. Multi-tenancy. К концу — деплоите production Flink-приложения на Kubernetes без боли.

Модуль 16: Production essentials и Capstone. Мониторинг (Prometheus метрики, что смотреть), troubleshooting (backpressure, hot keys, slow checkpoints), capacity planning, security (Kerberos, mTLS, SSL Kafka). Capstone-проект: end-to-end приложение CDC -> Flink -> Kafka + Iceberg с exactly-once. К концу — у вас в портфолио реальный production-ready streaming pipeline.


Что НЕ покрыто

Чтобы быть честным про границы курса:

  • Flink ML и model serving — отдельная ниша, заслуживающая своего курса.
  • Custom state backend implementation — это уровень разработчика Flink, не пользователя.
  • CEP (Complex Event Processing) — упоминается, но deep dive вне scope (отдельная мощная подсистема).
  • Gelly (graph processing) — устаревшее API в 2.x, не рекомендуется для нового кода.
  • PyFlink internals — упоминается, но не разбирается до уровня Beam Portability.

Если что-то из этого критично для вашей задачи — после курса вы будете подготовлены, чтобы изучить это самостоятельно по официальной документации.


Темп прохождения

Курс рассчитан примерно на 55 часов активного изучения:

  • Чтение материалов: ~20 часов.
  • Hands-on упражнения и эксперименты: ~25 часов.
  • Capstone-проект (модуль 16): ~10 часов.

Реальный темп зависит от вашего бэкграунда:

  • Опытный data engineer с Kafka и Spark Streaming: 35-45 часов. Многие концепции уже знакомы, фокус — на специфике Flink.
  • Backend-разработчик с опытом Kafka, без streaming: 55-70 часов. Stream processing концепции (event time, watermarks, windowing) требуют времени на укоренение.
  • Новичок в дата-инженерии: не рекомендую этот курс как первый. Сначала пройдите kafka-course и базовый курс по реляционным БД.

Рекомендую: 1-2 модуля в неделю с обязательным запуском кода. Чисто читать без рук на клавиатуре — Flink не прощает: материал кажется понятным, но первый production job будет сложным.

WARNING

Не пропускайте hands-on задания, особенно в блоке 2 (stateful streaming). State и event time — это области, где интуиция врёт. Конкретный пример с реальным запуском в Web UI исправляет mental model на годы вперёд.


Попробуй сам

Прежде чем переходить к следующему уроку (установка Flink 2.2):

  1. Проверьте Java: запустите java --version. Если меньше 17, установите Eclipse Temurin 17 или 21 (рекомендую 21 LTS).
  2. Проверьте Docker: docker --version и docker compose version. Должны быть установлены и работать.
  3. Проверьте свободное место: у вас должно быть минимум 10 GB свободного диска (Flink Docker images + checkpoints + Kafka data).
  4. Откройте Telegram-группу курса — там вы будете задавать вопросы, когда что-то не запустится.

Если что-то из этого не готово — потратьте полчаса сейчас. Это сэкономит вам два часа на следующем уроке.

Проверка знанийKnowledge check
Какие два prerequisites наиболее критичны для успешного прохождения курса и почему?
ОтветAnswer
(1) Уверенное знакомство с Apache Kafka на уровне пользователя — потому что Flink в большинстве production кейсов читает из Kafka и пишет в Kafka, и без понимания партиций, consumer groups и offsets курс будет идти в режиме "сначала разберись с Kafka". (2) Java 17+ как рабочий язык — потому что весь учебный код на Java, документация Flink преимущественно на Java, и для собственных production-приложений Java — самый поддерживаемый путь. SQL и Docker важны, но их можно подтянуть по ходу.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 4. Какой типичный паттерн, специфичный для Flink, новички с опытом Kafka часто понимают неправильно?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3