Что нужно знать заранее и 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Самый частый пробел при переходе с 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)
Модуль 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 будет сложным.
Не пропускайте hands-on задания, особенно в блоке 2 (stateful streaming). State и event time — это области, где интуиция врёт. Конкретный пример с реальным запуском в Web UI исправляет mental model на годы вперёд.
Попробуй сам
Прежде чем переходить к следующему уроку (установка Flink 2.2):
- Проверьте Java: запустите
java --version. Если меньше 17, установите Eclipse Temurin 17 или 21 (рекомендую 21 LTS). - Проверьте Docker:
docker --versionиdocker compose version. Должны быть установлены и работать. - Проверьте свободное место: у вас должно быть минимум 10 GB свободного диска (Flink Docker images + checkpoints + Kafka data).
- Откройте Telegram-группу курса — там вы будете задавать вопросы, когда что-то не запустится.
Если что-то из этого не готово — потратьте полчаса сейчас. Это сэкономит вам два часа на следующем уроке.