Apache Flink 1.20.4 Release Announcement

April 22, 2026 - Sergey Nuyanzin

The Apache Flink Community is pleased to announce the fourth bug fix release of the Flink 1.20 series.

This release includes 41 bug fixes, vulnerability fixes, and minor improvements for Flink 1.20. 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 see: JIRA.

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

Release Artifacts #

Maven Dependencies #

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

Binaries #

You can find the binaries on the updated Downloads page.

Docker Images #

PyPi #

Release Notes #

    Release Notes - Flink - Version 1.20.4

Bug

  • [FLINK-16686] - [State TTL] Make user class loader available in native RocksDB compaction thread
  • [FLINK-35332] - Manually setting rest.bind-address does not work for Flink running on Hadoop Yarn dual network environment
  • [FLINK-35556] - Wrong constant in RocksDBSharedResourcesFactory.SLOT_SHARED_MANAGED
  • [FLINK-37266] - Python CLI arguments doesn't work in session mode
  • [FLINK-37813] - SlotManager re-allocation slots upon failover causes ResourceManager start more TaskManager and release unwanted TaskManager failure
  • [FLINK-37971] - SQL hints are dropped when combining multiple SELECT into a single source
  • [FLINK-38344] - The local files of the HistoryServer may risk never being deleted.
  • [FLINK-38375] - Flink Resouce leak on Flink k8s
  • [FLINK-38400] - STDDEV/VAR function with FILTER condition may cause wrong result
  • [FLINK-38483] - Job cannot be recovered from unaligned checkpoint , exception: Cannot get old subtasks from a descriptor that represents no state
  • [FLINK-38585] - Pyflink's thread mode may not work when using shipped venv.zip archive as virtual env
  • [FLINK-38590] - Pypi does not support source distribution with hyphen naming
  • [FLINK-38703] - ConcurrentModificationException in FineGrainedResourceManager during reporting metrics
  • [FLINK-38750] - Validation of queries with functions erroneously invoked under select fails with StackOverflow
  • [FLINK-38797] - PyFlink CsvSchemaBuilder.set_null_value method missing return self
  • [FLINK-38815] - The debug log will print the sensitive information of data security cookie certification in task manager and jobmanager
  • [FLINK-38824] - Incorrect default values for primitive types
  • [FLINK-38951] - Upgrade pemja to 0.5.6
  • [FLINK-39017] - Flink WebUI Job graph node click interaction fails in Chrome 144+ (PointerEvents suppression)
  • [FLINK-39135] - Backport GSBlobStorageImpl precondition check to 1.20.4
  • [FLINK-39355] - Table program cannot be compiled for JSON_OBJECT
  • [FLINK-39371] - CurrentDatabase fails for some patterns
  • [FLINK-39394] - Job overview metrics (business/backpressure/data skew) are showing N/A when some nodes are finished
  • [FLINK-39395] - Add spotless upToDateChecking
  • [FLINK-39424] - Setting LIKE does not support default escape characters.

Improvement

  • [FLINK-37881] - Drop gosu in favour of Dockerfile's USER
  • [FLINK-38914] - Redirect users to deeplink when visiting an outdated or master docs page (instead of stable)
  • [FLINK-38924] - Redirect users to documentation home page when encountering a 404
  • [FLINK-38925] - Update Matomo URL to the right domain
  • [FLINK-38955] - Add canonical tag to generated Javadoc and PyDocs
  • [FLINK-39022] - Update default cipher suite value in SecurityOptions
  • [FLINK-39139] - Update lz4-java to 1.10.3