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 не существует.
Release cycle Apache Flink
Apache Flink имеет два типа релизов:
Feature releases — выходят примерно раз в 4 месяца. Несут новые фичи, breaking changes возможны (хотя комьюнити старается их минимизировать). Поддерживаются примерно 12 месяцев после релиза.
LTS (Long-Term Support) releases — выходят примерно раз в 1.5-2 года. Получают security patches и критические bug fixes на 2-3 года. Это якорные версии для enterprise.
В 2026 году картина такая:
Рекомендация на 2026 год для НОВЫХ проектов: 2.2 (или ближайший последующий feature release). Для legacy проектов на 1.x — план миграции на 2.x в течение года.
Flink 1.20 LTS: что у вас в legacy
Если вы видите 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).
Flink 2.0: major release с breaking changes
Релиз в марте 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).
Не пытайтесь сделать миграцию 1.x -> 2.x в один прыжок без подготовки. Правильный путь: (1) обновиться до 1.20 LTS, (2) переписать legacy sources/sinks на Source V2 / Sink V2 (они работают и в 1.20), (3) обновиться на 2.x. Этот промежуточный шаг существенно снижает риски.
Flink 2.1: AI inflection point
Релиз в августе 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 вручную).
Flink 2.2: текущий baseline (май 2026)
Свежий 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 он работает.
Какую версию выбирать
Не пытайтесь использовать 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Попробуй сам
- Узнайте версию Flink в вашем production-кластере (или в проекте на работе). Если у вас её нет — выберите для практики курса: 2.2 (через docker-compose из урока 00.3).
- Если у вас 1.x — найдите в коде проекта импорты
org.apache.flink.streaming.api.functions.source.SourceFunctionилиFlinkKafkaConsumer. Если есть — это код, который нужно мигрировать на Source V2 при переходе на 2.x. - Откройте Flink Release Notes для своей версии на flink.apache.org. Прочитайте раздел “Breaking changes” — это формирует понимание, что меняется между релизами.