Learning Platform
Глоссарий Troubleshooting
Урок 02.03 · 18 мин
Средний
Flink VersionsFlink 2.xFlink 1.20 LTSMigrationRelease Cycle

Flink версии в 2026: что выбирать

В 2026 году Flink находится в активной фазе развития 2.x ветки. Если вы открываете чужой Flink-проект — почти наверняка увидите одну из четырёх версий: 2.2 (свежий baseline), 2.1 (с AI inflection), 2.0 (первый major release 2.x), 1.20 LTS (последний LTS-релиз ветки 1.x). Остальные 1.x версии — EOL’d (без security patches, не используйте).

Этот урок — карта того, что менялось в этих версиях и какие практические следствия для production. Без понимания этого вы будете писать код, который компилируется на одной версии и падает на другой; читать tutorial 2021 года и удивляться, почему API не существует.


Apache Flink имеет два типа релизов:

Feature releases — выходят примерно раз в 4 месяца. Несут новые фичи, breaking changes возможны (хотя комьюнити старается их минимизировать). Поддерживаются примерно 12 месяцев после релиза.

LTS (Long-Term Support) releases — выходят примерно раз в 1.5-2 года. Получают security patches и критические bug fixes на 2-3 года. Это якорные версии для enterprise.

В 2026 году картина такая:

Timeline релизов Flink 2024-2026
2024 август: Flink 1.20 LTSПоследний LTS-релиз ветки 1.x. Получает security patches до 2026-2027. Большинство enterprise legacy кластеров — на этой версии. Stable, проверенная.
2025 март: Flink 2.0 (major)Первый major release 2.x. Disaggregated state (ForSt backend для cloud), удаление legacy APIs, миграция SourceFunction/SinkFunction на Source V2 / Sink V2. Breaking changes!
2025 август: Flink 2.1Production-ready AI/ML inference в SQL: ML_PREDICT функция. Улучшения адаптивного scheduler. Доводка disaggregated state. Это inflection point для streaming + AI.
2026 май: Flink 2.2 (current baseline)Текущий baseline курса. Усиленный CDC, улучшения Kubernetes Operator (autoscaling v2), VARIANT тип в SQL для semi-structured data, дальнейшая optimization disaggregated state.

Рекомендация на 2026 год для НОВЫХ проектов: 2.2 (или ближайший последующий feature release). Для legacy проектов на 1.x — план миграции на 2.x в течение года.


Если вы видите Flink 1.20.x в production — это нормально. LTS-релизы живут долго, и многие enterprise не торопятся обновляться.

Что важно знать про 1.20:

  • API: SourceFunction, SinkFunction всё ещё работают (хотя помечены deprecated). Source V2 / Sink V2 уже есть, но не обязательны.
  • State backends: HashMapStateBackend, EmbeddedRocksDBStateBackend. ForSt (disaggregated state) — НЕТ.
  • Deployment: Application mode, Session mode, Per-job mode (последний deprecated).
  • Kafka: используется flink-connector-kafka со старым FlinkKafkaConsumer / FlinkKafkaProducer (deprecated) ИЛИ новые KafkaSource / KafkaSink.
  • Table API / SQL: похож на 2.x, но без ML_PREDICT и VARIANT.
  • PyFlink: работает, но имеет ограничения в state TTL и async-функциях.

EOL plan: security patches до примерно 2027 года, потом конец жизни. Поддержка от вендоров (Ververica, Cloudera) может продолжаться дольше.

Совместимость savepoints: savepoint из 1.20 МОЖНО мигрировать на 2.0+ через утилиту state processor API, но это нетривиальная операция (требует кастомного кода для удаления deprecated state).


Релиз в марте 2025 — первый major bump за 5 лет (1.0 был в 2016). Цель: убрать deprecated APIs, ввести disaggregated state, упростить кластерную модель.

Что удалили (breaking changes):

  • DataSet API — окончательно удалён. Всё через DataStream API в bounded mode.
  • Legacy SourceFunction — удалён. Все sources на Source V2.
  • Legacy SinkFunction — удалён. Все sinks на Sink V2.
  • Per-job deployment mode — удалён. Только Application mode и Session mode.
  • Старые Kafka connectors (FlinkKafkaConsumer) — удалены. Только KafkaSource / KafkaSink.
  • Scala API в core — удалено. Только Java API (Scala можно использовать через Java API).

Что добавили:

  • Disaggregated state через ForSt (Flink RocksDB) state backend. Storage (S3, GCS) отделён от compute (TaskManager). Гигантский state на S3 без проблем.
  • Materialized Tables в Table API — встроенная поддержка для streaming materialized views.
  • Updated default values для многих конфигурационных параметров (более sensible defaults).
  • Async retry strategies для AsyncFunction.

Что это значит на практике:

Если у вас код на Flink 1.x с SourceFunction или FlinkKafkaConsumer — миграция на 2.x требует переписать source/sink. Не тривиально, но не сложно (Source V2 API documented).

Если у вас savepoint из 1.x — нужно использовать State Processor API для миграции (отдельный документированный процесс).

Если у вас deployment в per-job mode — переходите на Application mode (обсуждается в модуле 02).

WARNING

Не пытайтесь сделать миграцию 1.x -> 2.x в один прыжок без подготовки. Правильный путь: (1) обновиться до 1.20 LTS, (2) переписать legacy sources/sinks на Source V2 / Sink V2 (они работают и в 1.20), (3) обновиться на 2.x. Этот промежуточный шаг существенно снижает риски.


Релиз в августе 2025. Главное событие — production-ready AI/ML inference в SQL через функцию ML_PREDICT.

Что нового:

  • ML_PREDICT в SQL: вызов внешней ML модели (через HTTP/gRPC к model serving сервису) прямо в SQL-запросе. Async I/O под капотом.

    SELECT
      user_id,
      transaction_amount,
      ML_PREDICT('fraud_model_v3', user_id, transaction_amount, merchant_category) AS fraud_score
    FROM transactions
    WHERE fraud_score > 0.8

    Это меняет ландшафт: real-time ML scoring доступен через SQL без написания AsyncFunction вручную.

  • Adaptive Scheduler v2 — улучшения автоматического масштабирования parallelism on-the-fly.

  • Доводка disaggregated state — больше операций оптимизировано для cloud-native deployment.

  • Connector improvements: Kafka connector ускорен, JDBC connector с улучшенной transactional семантикой.

Что это значит:

Если ваша задача — real-time ML scoring, Flink 2.1+ существенно проще, чем 1.x или 2.0 (где нужно писать AsyncFunction вручную).


Свежий feature release. Это baseline нашего курса.

Главные изменения:

  • Flink CDC улучшения: snapshot + streaming pipelines описываются в YAML, source-to-sink CDC pipelines без Java-кода для типичных случаев. Это покрывается в модуле 14.

  • Kubernetes Operator: Autoscaling v2 — улучшенный автоскейлер на основе backpressure, latency, и кастомных метрик. Меньше “false positives” в decisions.

  • VARIANT тип в SQL — поддержка semi-structured data (JSON-like) без жёсткой схемы. Удобно для гетерогенных событий из Kafka.

    CREATE TABLE events (
      event_type STRING,
      payload VARIANT
    ) WITH ('connector' = 'kafka', ...);
    
    SELECT payload['user_id'], payload['amount']
    FROM events WHERE event_type = 'purchase';
  • Дальнейшая оптимизация ForSt — disaggregated state работает быстрее, особенно для read-heavy workloads.

  • SQL improvements: новые TVF (table-valued functions), оптимизатор более sophisticated.

Совместимость: savepoints из 2.0 и 2.1 совместимы с 2.2. Это плавный рост.


Что было раньше: краткая история

Чтобы понимать, какой код встретится в legacy:

  • Flink 1.0 (март 2016) — первый stable release.
  • Flink 1.4 / 1.5 — production-ready exactly-once с Kafka transactional producer.
  • Flink 1.9-1.10 — DataStream API стабилен, миграция со Storm обычна.
  • Flink 1.11 — крупный релиз Table API + SQL, унификация с DataStream.
  • Flink 1.13 — Reactive Mode (autoscaling), Application mode стабилен.
  • Flink 1.15 — Splittable sources, Sink V2 introduced (как experimental).
  • Flink 1.17 / 1.18 — Generic state TTL, Native Kubernetes deployment мature.
  • Flink 1.20 LTS — последний LTS ветки 1.x, августа 2024.

Версии до 1.13 считайте deeply legacy — там APIs очень другие.


Версии connectors: отдельная нумерация

Важный момент: Flink connectors имеют свою нумерацию, отдельную от core Flink. Например, flink-connector-kafka 3.4.0 совместим с Flink 1.20 и 2.x.

В 2.x появилась нотация типа 3.4.0-1.20 — connector 3.4.0 для Flink 1.20. Это запутывает, но позволяет одной версии connector поддерживать несколько core версий.

Что важно проверять: connector compatibility matrix на сайте Flink. Документация для каждого connector явно перечисляет, с какими версиями Flink он работает.


Какую версию выбирать

Decision: какую версию Flink использовать
Новый проект, 2026Для нового greenfield-проекта используйте latest stable. На момент написания курса — 2.2. Получаете все улучшения, актуальные APIs, поддержку community.
Conservative enterpriseЕсли корпоративная политика требует LTS-релизов с длительной поддержкой — Flink 1.20 LTS. Но планируйте миграцию на 2.x в горизонте года-полутора, поскольку 1.20 EOL примерно в 2027.
Legacy 1.x (не 1.20)Если у вас Flink 1.13-1.19 — это EOL территория. Security patches не приходят. Срочно планируйте миграцию: сначала на 1.20 LTS, потом на 2.x.
Уже 2.0 или 2.1Обновление на 2.2 — incremental, без breaking changes. Savepoints совместимы. Конфиги работают. Можете обновляться по плану.
TIP

Не пытайтесь использовать NIGHTLY или RC версии в production. Это путь к боли. Stable feature releases — baseline. Patches (типа 2.2.1, 2.2.2) — это нормально применять.


Что меняется в курсе

Все примеры в этом курсе используют Flink 2.2 APIs:

  • Source V2 (KafkaSource, JdbcSource).
  • Sink V2 (KafkaSink, JdbcSink с two-phase commit).
  • Application mode для deployment (где обсуждается).
  • ForSt и RocksDB state backends.
  • ML_PREDICT в примерах SQL (модуль 12).
  • Flink CDC YAML pipelines (модуль 14).

Если вы работаете с 1.20 LTS — большинство примеров работают с минимальными изменениями (импорты, иногда сигнатуры). Места, где API существенно отличается, помечены явно в тексте.

Если вы работаете с более старыми 1.x — примеры могут не работать. Сначала обновитесь до 1.20.

JobManager internals: что изменилось в архитектуре с 1.x до 2.x

Попробуй сам

  1. Узнайте версию Flink в вашем production-кластере (или в проекте на работе). Если у вас её нет — выберите для практики курса: 2.2 (через docker-compose из урока 00.3).
  2. Если у вас 1.x — найдите в коде проекта импорты org.apache.flink.streaming.api.functions.source.SourceFunction или FlinkKafkaConsumer. Если есть — это код, который нужно мигрировать на Source V2 при переходе на 2.x.
  3. Откройте Flink Release Notes для своей версии на flink.apache.org. Прочитайте раздел “Breaking changes” — это формирует понимание, что меняется между релизами.
Проверка знанийKnowledge check
Команда планирует апгрейд с Flink 1.16 (давно EOL'd) на 2.2 в одном квартале. Какой план миграции более безопасен и почему?
ОтветAnswer
Безопасный план: (1) сначала обновиться на 1.20 LTS — это small jump, нет major breaking changes, можно проверить, что приложение работает на свежем 1.x; (2) переписать SourceFunction/SinkFunction на Source V2 / Sink V2 ещё на 1.20 (они там доступны), убедиться, что savepoints с новыми sources создаются корректно; (3) только после этого мигрировать на 2.x — savepoints совместимы, и breaking changes уже учтены. Прямой прыжок 1.16 -> 2.2 опаснее, потому что: (а) накапливается слишком много breaking changes одновременно; (б) тестировать совместимость savepoints через major version jump сложнее; (в) если что-то падает, неясно, что причина — версия 2.x или код, написанный под 1.x. Поэтапная миграция позволяет catch проблемы по одной.

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

Результат: 0 из 0
Концептуальный
Вопрос 1 из 4. Какой главный breaking change в Flink 2.0 относительно 1.20 LTS, требующий рефакторинга кода?

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

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

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

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