Что это за курс
Apache Flink — это движок stateful stream processing, который работает в production у Alibaba (десятки петабайт в день), Netflix (real-time recommendations), Uber (ETA prediction), Pinterest (real-time analytics) и сотен других компаний. Если Kafka — это нервная система данных, то Flink — это мозг, который превращает поток событий в решения: счётчики, агрегаты, JOIN-ы, материализованные представления, ML-features.
Этот курс учит писать production Flink-jobs: stateful, exactly-once, разворачиваемые на Kubernetes, выживающие падения. Он не про теорию stream processing и не про внутреннее устройство Flink — для этого есть отдельный курс flink-internals (senior-уровень). Здесь — про то, как использовать Flink как инструмент инженера, который завтра пишет JOIN двух Kafka-топиков с windowing и через неделю катит его в прод.
Для кого этот курс
Курс рассчитан на data engineers и backend-инженеров, у которых уже есть опыт работы с Kafka (producer/consumer, понимание partitions и consumer groups), и которые хотят добавить в свой стек stateful streaming. Если вы умеете писать продьюсера в Kafka на Java или Python, читали из топика, понимаете offset commit и rebalance — у вас уже есть фундамент, на который ляжет Flink.
Что нужно знать заранее:
- Kafka на уровне пользователя — что такое топик, партиция, consumer group, offset, replication. Курс kafka-course покрывает этот фундамент.
- Java или Python на уверенном уровне — DataStream API в курсе разбирается на Java (это родной язык Flink); PyFlink упоминается, но глубокое погружение в Python API оставлено на senior-продолжение.
- Базовое понимание SQL — модуль 12 покрывает Table API и Flink SQL.
- Знакомство с Docker и Kubernetes на уровне пользователя — модули 03 и 15 предполагают, что вы умеете запускать контейнеры и читать манифесты.
Чего знать НЕ обязательно:
- Опыт работы со Spark Streaming, Kafka Streams или другими stream-фреймворками — все сравнения будут даны явно, без предполагаемого бэкграунда.
- Понимание внутренностей Flink (state backends, network stack, scheduling) — это намеренно вне scope, чтобы не утопить вас в деталях, которые не нужны для написания jobs.
- Опыт ML и feature engineering — модули посвящены классическому stream processing: ETL, агрегации, JOIN, CDC, materialized views.
Если вы пришли с опытом Kafka Streams или Spark Structured Streaming — модуль 01 (урок про сравнение фреймворков) объясняет, в чём Flink отличается и когда какой инструмент выбирать. Никаких внезапных предположений о вашем бэкграунде.
Что получишь к концу курса
К моменту завершения курса вы будете уметь:
- Писать stateful streaming-jobs на DataStream API. Map/filter/keyBy/window — рабочий инструмент, а не магия. Понимание parallelism, partitioning, watermarks.
- Разбираться в state: keyed state (ValueState, ListState, MapState, ReducingState, AggregatingState), operator state, broadcast state. Когда какой использовать.
- Работать с временем: event time vs processing time, watermarks, late events, idle sources. Tumbling/sliding/session windows. Allowed lateness.
- Обеспечивать exactly-once: checkpoints, savepoints, two-phase commit в sinks. Kafka transactional producer + Flink. End-to-end exactly-once с Kafka и JDBC.
- Использовать Table API и SQL для аналитических задач. Когда SQL быстрее DataStream, когда нет. Continuous queries, dynamic tables, retract streams.
- Строить CDC-пайплайны через Flink CDC: Postgres logical replication, MySQL binlog, MongoDB change streams. Производить материализованные представления.
- Деплоить на Kubernetes через Flink Kubernetes Operator: FlinkDeployment CRD, HA через Kubernetes API server, savepoint-driven upgrades.
- Решать production-проблемы: backpressure, hot keys, slow checkpoints, OOM в state backend, JOIN cardinality explosion. Что смотреть в Web UI и метриках.
К концу курса у вас будет capstone-проект: production-ready streaming-приложение, которое читает CDC из Postgres, обогащает через JOIN с Kafka-топиком, агрегирует через windowing, и пишет результат в Kafka + Iceberg-таблицу с exactly-once гарантиями.
Чего в этом курсе НЕТ
Чтобы избежать ложных ожиданий, явно перечислю, что вне scope этого курса:
Internals Flink — как работает state backend на уровне RocksDB, как устроен network stack (credit-based flow control, buffer pools), как scheduler принимает решения о размещении задач, как работает Chandy-Lamport algorithm под капотом. Это огромная тема, и она вынесена в отдельный курс flink-internals.
Низкоуровневая оптимизация JVM — настройка G1GC vs ZGC, off-heap memory tuning, NUMA-awareness. Production-курс даёт sensible defaults и объясняет, что мониторить, но deep performance tuning — это сезон работы senior-инженеров.
Машинное обучение на Flink — Flink ML, online learning, model serving через AsyncFunction. Это специфическая ниша, заслуживающая отдельного материала.
Полноценный PyFlink — Python API упоминается, но все основные примеры на Java. PyFlink имеет ряд compromises (UDF performance, type system), и его внутренние детали (Beam Portability) — это отдельная тема.
Stream processing на других движках — нет глубокого погружения в Spark Structured Streaming, Kafka Streams, Beam runners, Materialize, RisingWave, Arroyo. Эти продукты упоминаются для сравнения, но не разбираются в деталях.
Структура курса
Курс — 17 модулей, разделённых на четыре логических блока:
Блок 1: Фундамент (модули 00-03). Что такое stream processing, как устроен Flink на уровне обзора, базовый DataStream API. К концу этого блока вы умеете запускать простой stateless job в локальном кластере и понимаете job graph в Web UI.
Блок 2: Stateful streaming (модули 04-08). Keyed state, windows, event time, watermarks, ProcessFunction с timers, broadcast pattern. Это core competence Flink. К концу блока вы умеете писать stateful jobs с windowing и event time.
Блок 3: Reliability и SQL (модули 09-12). Async I/O, checkpoints, savepoints, end-to-end exactly-once, Table API и SQL. К концу — production-ready streaming с гарантиями доставки и аналитическим SQL.
Блок 4: Production deployment (модули 13-16). Production connectors, Flink CDC, Kubernetes deployment, capstone-проект с reliability essentials. К концу — вы способны провести Flink-приложение от написания до прода.
Что после этого курса
Если после завершения вам захочется глубже понять Flink — есть несколько направлений:
flink-internals — senior-курс про то, как Flink устроен изнутри. State backend internals (RocksDB tuning, MemoryStateBackend vs RocksDB vs ForSt), network stack (credit-based backpressure), scheduling (Adaptive scheduler, slot sharing groups), Chandy-Lamport checkpointing на уровне исходного кода. Этот курс предполагает, что текущий вы прошли.
Почему важно знать internals FlinkStream processing в SQL — глубокое погружение в Flink SQL: temporal joins, pattern matching (MATCH_RECOGNIZE), user-defined functions, custom catalogs. Если ваша работа — построение аналитических pipelines, это направление.
Data Lake архитектура — как Flink интегрируется с Apache Iceberg, Apache Hudi, Delta Lake. Streaming ingestion в lakehouse — горячая тема 2026 года.
Apache Iceberg — глубокое погружениеKubernetes operators и платформы данных — построение data platform поверх Flink Operator, managed services, multi-tenancy.
Версия Flink
Курс построен вокруг Flink 2.2 (релиз май 2026) как baseline. Это самая свежая стабильная версия на момент написания курса. Где уместно, упоминаются:
- Flink 2.1 (декабрь 2025) — добавил production-ready AI/ML inference в SQL (ML_PREDICT функция).
- Flink 2.0 (март 2025) — major release с disaggregated state (ForSt state backend), удалением legacy APIs.
- Flink 1.20 LTS (август 2024) — последний LTS-релиз ветки 1.x, до сих пор используется в legacy кластерах.
- Flink 1.x EOL’d — версии до 1.20 больше не получают патчи безопасности.
Если у вас в проде Flink 1.x — миграция 1.20 -> 2.x обсуждается в модулях 02 и 15. API-различия для основных операций минимальны, но deployment modes и state backends изменились существенно.
Все code-примеры написаны для Flink 2.2 API. Если вы запускаете на 1.20 LTS — большинство примеров заработают, но импорты и некоторые сигнатуры могут отличаться. Сообщения об устаревших API из 1.x помечены явно.
Как заниматься
Курс рассчитан примерно на 55 часов активного изучения. Это включает чтение материалов, выполнение hands-on заданий, и работу над capstone в финальном модуле. Темп зависит от вашего бэкграунда — если вы уже работали со stream processing, темп будет в 1.5-2 раза быстрее.
Рекомендуемый ритм: 1-2 модуля в неделю, с реальным запуском кода. Простое чтение без рук на клавиатуре в Flink не работает — слишком много “почему не запускается”, которые понятны только когда сам собрал job, увидел в Web UI, что parallelism не тот, и исправил.
Каждый урок завершается Knowledge Check — вопросом для самопроверки. После каждого модуля — мини-quiz и exam-вопросы. Это не для оценки, а чтобы вы поймали моменты, где материал не отложился.
Попробуй сам
Прежде чем переходить к следующему уроку, выпиши в одно предложение, зачем вам нужен Flink в проекте или карьере. Без этого якоря материал быстро становится абстрактным набором API. Возможные варианты:
- “Хочу строить CDC-пайплайны из Postgres в OLAP-склады”.
- “Нужно делать real-time агрегации по Kafka-топикам с миллионами событий в секунду”.
- “В компании уже есть Flink-кластер, я хочу научиться писать jobs самостоятельно”.
- “Готовлюсь к роли data platform engineer, Flink — обязательный навык”.
Этот ответ возвращайтесь к нему в конце каждого модуля и проверяйте: “А этот модуль приближает меня к моей цели?”. Если нет — это нормально, не все модули одинаково применимы для всех ролей.
Как создавался курс
Курс создан при участии Claude (Anthropic) как соавтора: ИИ помогал писать материалы, структурировать темы, генерировать примеры кода и диаграммы. Каждая глава проходила ручную сверку с первоисточниками — спецификациями, документацией, исходным кодом рассматриваемых систем — но гарантировать 100% точность невозможно.
Если вы заметили неточность, опечатку или хотите предложить улучшение — напишите в Telegram-группу курса. Это самый ценный вклад в курс, который вы можете сделать.
Углублённое изучение с Claude
Курс рассчитан на самостоятельное изучение, но любая теория быстрее ложится, если задавать вопросы. Рекомендую держать рядом браузерное расширение Claude (claude.com/download) — оно работает с контентом открытой страницы: выделяете кусок урока и спрашиваете напрямую.
Сценарии, которые особенно хорошо работают для углублённого погружения:
- «Объясни проще» / «дай ещё один пример» — когда формулировка из урока не дошла с первого раза.
- «Покажи, как это устроено на уровне кода / железа» — когда хочется спуститься на слой ниже того, что даёт урок.
- «Как это связано с [другая тема курса]» — когда нужно увязать концепцию с тем, что было раньше.
- «У меня в проекте стек X — как применить?» — когда хочется примерить материал на свой реальный кейс.
Это не замена курсу, а способ ускорить интеграцию материала в вашу картину мира. Если что-то из ответов Claude расходится с уроком — присылайте в Telegram-группу, курс будет уточнён.
Нашли ошибку?
Если заметили неточность, опечатку или хотите предложить улучшение:
Telegram-канал
Подписывайтесь, чтобы узнавать об обновлениях и новых курсах: