Apache Flink 2.0.1 Release Announcement

November 10, 2025 - Zakelly Lan

The Apache Flink Community is pleased to announce the first bug fix release of the Flink 2.0 series.

This release includes 51 bug fixes, vulnerability fixes, and minor improvements for Flink 2.0. Below you will find a list of all bug fixes and improvements (excluding improvements to the build infrastructure and build stability). For a complete list of all changes, please see: JIRA.

We highly recommend all users upgrade to Flink 2.0.1 or higher.

Release Artifacts #

Maven Dependencies #

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-java</artifactId>
  <version>2.0.1</version>
</dependency>
<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-streaming-java</artifactId>
  <version>2.0.1</version>
</dependency>
<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-clients</artifactId>
  <version>2.0.1</version>
</dependency>

Binaries #

You can find the binaries on the updated Downloads page.

Docker Images #

PyPi #

Release Notes #

    Release Notes - Flink - Version 2.0.1

Bug

  • [FLINK-16686] - [State TTL] Make user class loader available in native RocksDB compaction thread
  • [FLINK-30687] - FILTER not effect in count(*)
  • [FLINK-33926] - Can't start a job with a jar in the system classpath in native k8s mode
  • [FLINK-35117] - AsyncScalarFunction has a dependency issue.
  • [FLINK-37284] - ForwardForConsecutiveHashPartitioner cannot be chained in Adaptive batch.
  • [FLINK-37309] - Skewed join optimization not working as expected
  • [FLINK-37337] - Deploy script SQL Client in Embedded Mode to Kubernetes Results in FileNotFoundException
  • [FLINK-37350] - Memory leak caused by skewed join optimization strategy
  • [FLINK-37460] - Using State Processor API and Kafka Sink with Exactly once delivery leads to org.apache.kafka.common.errors.InvalidPidMappingException
  • [FLINK-37505] - Pyflink is not able to handle the new YAML based configs
  • [FLINK-37545] - StackOverflowError when using MetricGroup in custom WatermarkStrategy
  • [FLINK-37556] - OpenTelemetry reporter does not package all required classes
  • [FLINK-37557] - ResolvedSchema#getPrimaryKeyIndexes does not filter for physical columns
  • [FLINK-37576] - Batch job failed when submit JobGraph contains broadcast edge
  • [FLINK-37605] - SinkWriter may incorrectly infer end of input during rescale
  • [FLINK-37609] - Bump parquet libs to 1.15.1
  • [FLINK-37628] - Wrong reference counting in ForSt file cache
  • [FLINK-37670] - Watermark alignment can deadlock job if there are no more splits to be assigned
  • [FLINK-37747] - GlobalCommitterOperator cannot commit after scaling writer/committer
  • [FLINK-37760] - Bump parquet version to 1.15.2
  • [FLINK-37783] - TieredStorage doesn't work when Buffer Debloating is enabled
  • [FLINK-37803] - LocalTime without seconds is incorrectly serialized to SQL as a value literal
  • [FLINK-37820] - AsyncScalarFunction UDFs cannot be loaded via CompiledPlan
  • [FLINK-37833] - Code generated for binary key in BatchExecExchange causes incorrect shuffle
  • [FLINK-37856] - Sink option hints are not present in compiled plan
  • [FLINK-37867] - ForSt StateBackend fail to clean up files of the half-uploaded checkpoint when using path copying
  • [FLINK-37868] - Respect the `maxTransferBytes` when using path copying in ForSt
  • [FLINK-37870] - Unaligned checkpoint is disabled for all connections unexpectedly
  • [FLINK-38030] - Table.explainSql throw exception: xxx cannot be cast to class org.apache.flink.table.catalog.AbstractCatalog
  • [FLINK-38035] - Security Vulnerability in PyFlink Logging Mechanism (PythonEnvUtils.java)
  • [FLINK-38082] - User's async function timeout call may result in unexpected retries
  • [FLINK-38098] - When submitting a task with the flink run command, adding the -sae parameter will cause the task to be killed
  • [FLINK-38137] - RocksDB State Backend Null Serialization Causes NPE and Asymmetric (De)Serialization Logic
  • [FLINK-38195] - Some markdown syntax errors in tableApi page
  • [FLINK-38267] - Job cannot be recovered from unaligned checkpoint after rescaling when one task has multiple exchanges
  • [FLINK-38286] - MAP function with duplicate keys produces non-deterministic results
  • [FLINK-38319] - TO_TIMESTAMP_LTZ only accepts literal values in PyFlink
  • [FLINK-38327] - NPE during recovery from file-merged checkpoint after FO
  • [FLINK-38332] - Upgrade pemja to 0.5.5
  • [FLINK-38336] - Unexpected data copy during failover for ForSt statebackend
  • [FLINK-38347] - Checkpoint file-merging manager may delete the directory unexpectedly when some RPC messages lost
  • [FLINK-38370] - CommitterOperator does not checkpoint all pending committables
  • [FLINK-38415] - IndexOutOfBoundsException occasionally occurs after rocksdb.use-ingest-db-restore-mode is enabled
  • [FLINK-38433] - Avoid delete ForSt's directory when there happened to be an existing one
  • [FLINK-38483] - Job cannot be recovered from unaligned checkpoint , exception: Cannot get old subtasks from a descriptor that represents no state
  • [FLINK-35622] - Filter out noisy "Coordinator of operator xxxx does not exist" exceptions in batch mode
  • [FLINK-37810] - update log4j to 2.24.3 to fix critical vulnerabilities

Improvement

  • [FLINK-33977] - Adaptive scheduler may not minimize the number of TMs during downscaling
  • [FLINK-37568] - Improve the method flatten of class GlobalConfiguration
  • [FLINK-37623] - Async state support for `process()` in Datastream API
  • [FLINK-37333] - Use ForwardForUnspecifiedPartitioner when adaptive broadcast join takes effect