This page describes the release process of Apache Flink.

Verifying a Release Candidate

PLEASE NOTE: It is NOT necessary to run all checks to cast a vote for a release candidate.
However, you should clearly state which checks you did.
The release manager needs to ensure that each following check was done.

Legal: (required checks for a valid ASF compilant release)

  • Check if checksums and GPG files match the corresponding release files

  • Verify that the source archives do not contains any binaries

  • Check if the source release is building properly with Maven (including license header check (default) and checkstyle). Also the tests should be executed (mvn clean verify)
    • check build for custom hadoop version
    • check build for Scala 2.11

  • Verify that the LICENSE and NOTICE file is correct for the binary and source release.
    • All dependencies must be checked for their license and the license must be ASL 2.0 compatible (
    • The LICENSE and NOTICE files in the root directory refer to dependencies in the source release, i.e., files in the git repository (such as fonts, css, JavaScript, images)
    • The LICENSE and NOTICE files in flink-dist/src/main/flink-bin refer to the binary distribution and mention all of Flink's Maven dependencies as well

  • Check that all POM files point to the same version (mostly relevant to examine quickstart artifact files)

  • Read the file

Functional: (checks for delivering a release with good quality)

  • Run the, scripts and verify that the processes come up
    • Examine the *.out files (should be empty) and the log files (should contain no exceptions)
    • Test for Linux, OS X, Windows (for Windows as far as possible, not all scripts exist)
    • Shutdown and verify there are no exceptions in the log output (after shutdown)
    • Check all start+submission scripts for paths with and without spaces (./bin/* scripts are quite fragile for paths with spaces)
  • Verify that the examples are running from both ./bin/flink and from the web-based job submission tool
    • Should be run on
      • local mode (
      • cluster mode (
      • multi-node cluster (can simulate locally by starting two taskmanagers)
    • The flink-conf.yml should define more than one task slot

    • Results of job are produced and correct
    • Check also that the examples are running with the build-in data and external sources.

    • Examine the log output - no error messages should be encountered
    • Web interface shows progress and finished job in history

  • Test on a cluster with HDFS.
    • Check that a good amount of input splits is read locally (JobManager log reveals local assignments)

  • Test against a Kafka installation

  • Test the ./bin/flink command line client
    • Test "info" option, paste the JSON into the plan visualizer HTML file, check that plan is rendered
    • Test the parallelism flag (-p) to override the configured default parallelism

  • Verify the plan visualizer with different browsers/operating systems

  • Verify that the quickstarts for scala and java are working with the staging repository for both IntelliJ and Eclipse.
    • in particular the dependencies of the quickstart project need to be set correctly and the QS project needs to build from the staging repository (replace the snapshot repo URL with the staging repo URL)
    • The dependency tree of the QuickStart project must not contain any dependencies we shade away upstream (guava, netty, ...)
    • Test that quickstart archetypes are working on all platforms

  • Run examples on a YARN cluster

  • Run all examples from the IDE (Eclipse & IntelliJ)

  • Run an example with the RemoteEnvironment against a cluster started from the shell script

  • Pay special attention to new features

  • Test recovery and exactly-once guarantees with master and worker failures @todo @uce Will update this with scripts
    • YARN (see for details)
      • 2.3.0 <= version < 2.4.0
        • Set yarn.application-attempts for Flink
        • Set for YARN (upper bound on number of failures)
        • Note: it's expected for these Hadoop versions that all containers are killed when the application master fails
      • 2.4.0 <= version < 2.6.0
        • Important: in this version the task manager containers should stay alive when the application master is killed
      • 2.6.0 <= version
        • Check that the application is only killed by YARN after the system has seen the maximum number of application attempts during one interval
    • Standalone
      • Start multiple JobManager and TaskManager instances
      • Kill random instances (make sure that enough task slots and standby job managers are available)
  • Test building a SBT project depending on Flink and an optional dependency (connector, gelly, flink-ml).
  • Test the Scala/SBT giter8 template `g8 tillrohrmann/flink-project`
  • Test the Scala/SBT vanilla project in
  • Test the Scala/SBT quickstart script under https:/


  • Check that all links work, the front page is up to date
  • Check that new features are documented and updates to existing features are written down.
  • Ensure that the migration guide from the last release to the new release is available and up to date.

Creating a release candidate

  • Read and understand:
  • Read and create yourself a PGP key
  • run the ./tools/ script from the Flink repo, with the following parameters: (the call below as used to create RC1 of Flink 0.8.1

    GIT_AUTHOR="`git config --get` <`git config --get`>" ./

    Note: Make sure to run the ./tools/ script (in particular the "mvn deploy" call) with Java 8 to release the java8 module to mvn central as well.

  • Don't forget to update the documentation configuration to the new release version
  • Usually the script needs to be adopted a bit depending on the used linux distribution
  • Open, login in with your Apache user, and close the staging repository you created (DO NOT PRESS "RELEASE"!)
  • Check that the release files are located in your home directory
  • go to the ./tools/flink directory and push the release commit to release-x.y.z-rcn branch. (DO NOT CHANGE THE COMMIT OR COMMIT THE LOCAL CHANGES, the release commit has already been created.)
  • Send the VOTE mail to the dev@flink.a.o list, containing the release commit hash, the link to your and to the staging repository.

Releasing a Release Candidate

  • No labels