blob: 1005ab17f5128dee8a036c05602d8dac0811275a [file] [log] [blame]
<!DOCTYPE html>
<html lang="en" dir=ZgotmplZ>
<head>
<link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css">
<script src="/bootstrap/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" type="text/css" href="/font-awesome/css/font-awesome.min.css">
<script src="/js/anchor.min.js"></script>
<script src="/js/flink.js"></script>
<link rel="canonical" href="https://flink.apache.org/2024/03/21/apache-flink-kubernetes-operator-1.8.0-release-announcement/">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="The Apache Flink community is excited to announce the release of Flink Kubernetes Operator 1.8.0!
The release includes many improvements to the operator core, the autoscaler, and introduces new features like TaskManager memory auto-tuning.
We encourage you to download the release and share your experience with the community through the Flink mailing lists or JIRA! We&rsquo;re looking forward to your feedback!
Highlights # Flink Autotuning # We&rsquo;re excited to announce our latest addition to the autoscaling module: Flink Autotuning.">
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="Apache Flink Kubernetes Operator 1.8.0 Release Announcement" />
<meta property="og:description" content="The Apache Flink community is excited to announce the release of Flink Kubernetes Operator 1.8.0!
The release includes many improvements to the operator core, the autoscaler, and introduces new features like TaskManager memory auto-tuning.
We encourage you to download the release and share your experience with the community through the Flink mailing lists or JIRA! We&rsquo;re looking forward to your feedback!
Highlights # Flink Autotuning # We&rsquo;re excited to announce our latest addition to the autoscaling module: Flink Autotuning." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://flink.apache.org/2024/03/21/apache-flink-kubernetes-operator-1.8.0-release-announcement/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2024-03-21T18:00:00+00:00" />
<meta property="article:modified_time" content="2024-03-21T18:00:00+00:00" />
<title>Apache Flink Kubernetes Operator 1.8.0 Release Announcement | Apache Flink</title>
<link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.22eceb4d17baa9cdc0f57345edd6f215a40474022dfee39b63befb5fb3c596b5.css" integrity="sha256-IuzrTRe6qc3A9XNF7dbyFaQEdAIt/uObY777X7PFlrU=">
<script defer src="/en.search.min.2698f0d1b683dae4d6cb071668b310a55ebcf1c48d11410a015a51d90105b53e.js" integrity="sha256-Jpjw0baD2uTWywcWaLMQpV688cSNEUEKAVpR2QEFtT4="></script>
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
<meta name="generator" content="Hugo 0.124.1">
<script>
var _paq = window._paq = window._paq || [];
_paq.push(['disableCookies']);
_paq.push(["setDomains", ["*.flink.apache.org","*.nightlies.apache.org/flink"]]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
</head>
<body dir=ZgotmplZ>
<header>
<nav class="navbar navbar-expand-xl">
<div class="container-fluid">
<a class="navbar-brand" href="/">
<img src="/img/logo/png/100/flink_squirrel_100_color.png" alt="Apache Flink" height="47" width="47" class="d-inline-block align-text-middle">
<span>Apache Flink</span>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<i class="fa fa-bars navbar-toggler-icon"></i>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">About</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="/what-is-flink/flink-architecture/">Architecture</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/flink-applications/">Applications</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/flink-operations/">Operations</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/use-cases/">Use Cases</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/powered-by/">Powered By</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/roadmap/">Roadmap</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/community/">Community & Project Info</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/security/">Security</a>
</li>
<li>
<a class="dropdown-item" href="/what-is-flink/special-thanks/">Special Thanks</a>
</li>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Getting Started</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-docs-stable/docs/try-flink/local_installation/">With Flink<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-stable/docs/try-flink-kubernetes-operator/quick-start/">With Flink Kubernetes Operator<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-cdc-docs-stable/docs/get-started/introduction/">With Flink CDC<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-ml-docs-stable/docs/try-flink-ml/quick-start/">With Flink ML<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-statefun-docs-stable/getting-started/project-setup.html">With Flink Stateful Functions<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-docs-stable/docs/learn-flink/overview/">Training Course<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Documentation</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-docs-stable/">Flink 1.19 (stable)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-docs-master/">Flink Master (snapshot)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-stable/">Kubernetes Operator 1.8 (latest)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-main">Kubernetes Operator Main (snapshot)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-cdc-docs-stable">CDC 3.0 (stable)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-cdc-docs-master">CDC Master (snapshot)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-ml-docs-stable/">ML 2.3 (stable)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-ml-docs-master">ML Master (snapshot)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-statefun-docs-stable/">Stateful Functions 3.3 (stable)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
<li>
<a class="dropdown-item" href="https://nightlies.apache.org/flink/flink-statefun-docs-master">Stateful Functions Master (snapshot)<i class="link fa fa-external-link title" aria-hidden="true"></i>
</a>
</li>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">How to Contribute</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="/how-to-contribute/overview/">Overview</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/contribute-code/">Contribute Code</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/reviewing-prs/">Review Pull Requests</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/code-style-and-quality-preamble/">Code Style and Quality Guide</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/contribute-documentation/">Contribute Documentation</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/documentation-style-guide/">Documentation Style Guide</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/improve-website/">Contribute to the Website</a>
</li>
<li>
<a class="dropdown-item" href="/how-to-contribute/getting-help/">Getting Help</a>
</li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="/posts/">Flink Blog</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/downloads/">Downloads</a>
</li>
</ul>
<div class="book-search">
<div class="book-search-spinner hidden">
<i class="fa fa-refresh fa-spin"></i>
</div>
<form class="search-bar d-flex" onsubmit="return false;"su>
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/">
<i class="fa fa-search search"></i>
<i class="fa fa-circle-o-notch fa-spin spinner"></i>
</form>
<div class="book-search-spinner hidden"></div>
<ul id="book-search-results"></ul>
</div>
</div>
</div>
</nav>
<div class="navbar-clearfix"></div>
</header>
<main class="flex">
<section class="container book-page">
<article class="markdown">
<h1>
<a href="/2024/03/21/apache-flink-kubernetes-operator-1.8.0-release-announcement/">Apache Flink Kubernetes Operator 1.8.0 Release Announcement</a>
</h1>
March 21, 2024 -
Maximilian Michels
<a href="https://twitter.com/stadtlegende">(@stadtlegende)</a>
Gyula Fora
<a href="https://twitter.com/GyulaFora">(@GyulaFora)</a>
Rui Fan
<a href="https://twitter.com/1996fanrui">(@1996fanrui)</a>
<p><p>The Apache Flink community is excited to announce the release of Flink Kubernetes Operator 1.8.0!</p>
<p>The release includes many improvements to the operator core, the autoscaler, and introduces new features
like TaskManager memory auto-tuning.</p>
<p>We encourage you to <a href="https://flink.apache.org/downloads.html">download the release</a> and share your experience with the
community through the Flink <a href="https://flink.apache.org/community.html#mailing-lists">mailing lists</a> or
<a href="https://issues.apache.org/jira/browse/flink">JIRA</a>! We&rsquo;re looking forward to your feedback!</p>
<h2 id="highlights">
Highlights
<a class="anchor" href="#highlights">#</a>
</h2>
<h3 id="flink-autotuning">
Flink Autotuning
<a class="anchor" href="#flink-autotuning">#</a>
</h3>
<p>We&rsquo;re excited to announce our latest addition to the autoscaling module: Flink Autotuning.</p>
<p>Flink Autotuning complements Flink Autoscaling by auto-adjusting critical settings of the Flink configuration.
For this release, we support auto-configuring Flink memory which is a huge source of pain for users. Flink has
various memory pools (e.g. heap memory, network memory, state backend memory, JVM metaspace) which all need to be
assigned fractions of the available memory upfront in order for a Flink job to run properly.</p>
<p>Assigning too little memory results in pipeline failures, which is why most users end up assigning way too much memory.
Based on our experience, we&rsquo;ve seen that heap memory is at least 50% over-provisioned, even after using Flink Autoscaling.
The reason is that Flink Autoscaling is primarily CPU-driven to optimize pipeline throughput, but doesn&rsquo;t change the
ratio between CPU/Memory on the containers.</p>
<p>Resource savings are nice to have, but the real power of Flink Autotuning is the reduced time to production.</p>
<p>With Flink Autoscaling and Flink Autotuning, all users need to do is set a max memory size for the TaskManagers, just
like they would normally configure TaskManager memory. Flink Autotuning then automatically adjusts the various memory
pools and brings down the total container memory size. It does that by observing the actual max memory usage on the
TaskMangers or by calculating the exact number of network buffers required for the job topology. The adjustments are
made together with Flink Autoscaling, so there is no extra downtime involved.</p>
<p>Flink Autotuning can be enabled by setting:</p>
<pre tabindex="0"><code># Autoscaling needs to be enabled
job.autoscaler.enabled: true
# Turn on Autotuning
job.autoscaler.memory.tuning.enabled: true
</code></pre><p>For future releases, we are planning to auto-tune more aspects of the Flink configuration, e.g. the number of task slots.</p>
<p>Another area for improvement is how managed memory is auto-configured. If no managed memory is used, e.g. the heap-based
state backend is used, managed memory will be set to zero which helps save a lot of memory. If managed memory is used,
e.g. via RocksDB, the configured managed memory will be kept constant because Flink currently lacks metrics to
accurately measure the usage of managed memory. Nevertheless, users already benefit from the resource savings and
optimizations for heap, metaspace, and network memory. RocksDB users can solely focus their attention on configuring
managed memory. For RocksDB, we also added an option to add all saved memory to the managed memory. This is beneficial
when running with RocksDB to maximize the in-memory performance.</p>
<h3 id="improved-accuracy-of-autoscaling-metrics">
Improved Accuracy of Autoscaling Metrics
<a class="anchor" href="#improved-accuracy-of-autoscaling-metrics">#</a>
</h3>
<p>So far, Flink Autoscaling relied on sampling scaling metrics within the current metric window. The resulting accuracy
depended on the number of samples and the sampling interval. For this release, whenever possible, we use Flink&rsquo;s
accumulated metrics which provide cumulative counters of metrics like records processed or time spent processing.
This allows us to derive the exact metric value for the window.</p>
<p>For example, to calculate the average records processed per time unite, we measure the accumulated number of records
processed once at the start of the metric window, e.g. 1000 records. Then we measure a second time when the metric
window closes, e.g. 1500. By subtracting the former from the latter, we can calculate the exact amount of records
processed: 1500-1000 = 500. We can then divide by the metric window duration to get the average number of records
processed.</p>
<h3 id="rescale-time-estimation">
Rescale time estimation
<a class="anchor" href="#rescale-time-estimation">#</a>
</h3>
<p>We now measure the actual required restart time for applying autoscaling decisions. Previously, users had to manually
configure the estimated maximum restart time via <code>job.autoscaler.restart.time</code>. If the new feature is enabled, this
setting is now only used for the first scaling. After the first scaling, the actual restart time has been observed
and will be taken into account for future scalings.</p>
<p>This feature can be enabled via:</p>
<pre tabindex="0"><code>job.autoscaler.restart.time-tracking.enabled: true
</code></pre><p>For the next release we are thinking to enable it by default.</p>
<h3 id="autoscaling-for-session-cluster-jobs">
Autoscaling for Session Cluster Jobs
<a class="anchor" href="#autoscaling-for-session-cluster-jobs">#</a>
</h3>
<p>Autoscaling used to be an application / job cluster only feature. Now it is also supported for session clusters.</p>
<h3 id="improved-standalone-autoscaler">
Improved Standalone Autoscaler
<a class="anchor" href="#improved-standalone-autoscaler">#</a>
</h3>
<p>Since 1.7.0, Flink Autoscaling is now also available in a standalone module without the need to run on top of Kubernetes.</p>
<p>We merged notable improvements to the standalone autoscaler:</p>
<ul>
<li>The control loop now supports multiple thread</li>
<li>We implemented a JdbcAutoScalerStateStore for storing state via JDBC-supported databases</li>
<li>We implemented a JdbcAutoScalerEventHandler for emitting events to JDBC-supported databases</li>
</ul>
<h3 id="savepoint-trigger-nonce">
Savepoint Trigger Nonce
<a class="anchor" href="#savepoint-trigger-nonce">#</a>
</h3>
<p>A common request is to support a streamlined, user-friendly way of redeploying from a target savepoint. Previously this
was only possible by deleting the CR and recreating it with initialSavepointPath. A big downside of this approach is a
loss of savepoint/checkpoint history in the status that some platforms may need, resulting in non-cleaned up savepoints.</p>
<p>We introduced a <code>savepointRedeployNonce</code> field in the job spec similar to other action trigger nonces.</p>
<p>If the nonce changes to a new non-null value the job will be redeployed from the path specified in the
initialSavepointPath (or empty state If the path is empty).</p>
<h3 id="cluster-shutdown-and-resource-cleanup-improvements">
Cluster Shutdown and Resource Cleanup Improvements
<a class="anchor" href="#cluster-shutdown-and-resource-cleanup-improvements">#</a>
</h3>
<p>We improved the shutdown behavior and added better and more consistent logging. We now scale down the JobManager
replicas to zero before removing the JobManager deployment. This ensures that the TaskManager shutdown is clean
because the owner reference to the JobManager deployment is not removed immediately which gives TaskManagers time
to shut down.</p>
<h3 id="custom-flink-resource-mutator">
Custom Flink Resource Mutator
<a class="anchor" href="#custom-flink-resource-mutator">#</a>
</h3>
<p>Users already had the ability to provide custom resource validators to the operator. With this release, we added
support for custom mutators. See the <a href="https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.8/docs/operations/plugins/#custom-flink-resource-mutators">docs</a>.</p>
<h3 id="smaller-operator-image">
Smaller Operator image
<a class="anchor" href="#smaller-operator-image">#</a>
</h3>
<p>Through build optimizations, we were able to reduce the size of the Docker image by 20%.</p>
<h3 id="experimental-features">
Experimental Features
<a class="anchor" href="#experimental-features">#</a>
</h3>
<h4 id="cluster-resource-capacity-check">
Cluster Resource Capacity Check
<a class="anchor" href="#cluster-resource-capacity-check">#</a>
</h4>
<p>The operator can automatically check if sufficient resources are available for an autoscaling decision. The information
is retrieved from the Kubernetes cluster based on the available node metrics and the maximum node size of the Kubernetes
Cluster Autoscaler.</p>
<p>The feature can be turned on by setting this configuration value:</p>
<pre tabindex="0"><code>kubernetes.operator.cluster.resource-view.refresh-interval: 5 min
</code></pre><h2 id="release-notes">
Release Notes
<a class="anchor" href="#release-notes">#</a>
</h2>
<p>The release notes can be found <a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12353866&amp;projectId=12315522">here</a>.</p>
<h2 id="release-resources">
Release Resources
<a class="anchor" href="#release-resources">#</a>
</h2>
<p>The source artifacts and helm chart are available on the Downloads page of the Flink website. You can easily try out the new features shipped in the official 1.8.0 release by adding the Helm chart to your own local registry:</p>
<pre tabindex="0"><code>$ helm repo add flink-kubernetes-operator-1.8.0 https://archive.apache.org/dist/flink/flink-kubernetes-operator-1.8.0/
$ helm install flink-kubernetes-operator flink-kubernetes-operator-1.8.0/flink-kubernetes-operator --set webhook.create=false
</code></pre><p>You can also find official Kubernetes Operator Docker images of the new version on <a href="https://hub.docker.com/r/apache/flink-kubernetes-operator">Dockerhub</a>.</p>
<p>For more details, check the <a href="https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.8/">updated documentation</a> and the release notes. We encourage you to download the release and share your feedback with the community through the Flink mailing lists or JIRA.</p>
<h2 id="list-of-contributors">
List of Contributors
<a class="anchor" href="#list-of-contributors">#</a>
</h2>
<p>1996fanrui, Alexander Fedulov, AncyRominus, Caican Cai, Cancai Cai, ConradJam, Domenic Bove, Dominik Dębowczyk,
Gabor Somogyi, Guillaume Vauvert, Gyula Fora, Hao Xin, Jerry Wang, Justin Chen, Máté Czagány, Maximilian Michels,
Peter Huang, Rui Fan, Ryan van Huuksloot, Samrat, Tony Garrard, Yang-LI-CS, ensctom, fengfei02, flashJd, Nicolas Fraison</p>
</p>
</article>
<div class="edit-this-page">
<p>
<a href="https://cwiki.apache.org/confluence/display/FLINK/Flink+Translation+Specifications">Want to contribute translation?</a>
</p>
<p>
<a href="//github.com/apache/flink-web/edit/asf-site/docs/content/posts/2024-03-21-release-kubernetes-operator-1.8.0.md">
Edit This Page<i class="fa fa-edit fa-fw"></i>
</a>
</p>
</div>
</section>
<aside class="book-toc">
<nav id="TableOfContents"><h3>On This Page <a href="javascript:void(0)" class="toc" onclick="collapseToc()"><i class="fa fa-times" aria-hidden="true"></i></a></h3>
<ul>
<li>
<ul>
<li><a href="#highlights">Highlights</a>
<ul>
<li><a href="#flink-autotuning">Flink Autotuning</a></li>
<li><a href="#improved-accuracy-of-autoscaling-metrics">Improved Accuracy of Autoscaling Metrics</a></li>
<li><a href="#rescale-time-estimation">Rescale time estimation</a></li>
<li><a href="#autoscaling-for-session-cluster-jobs">Autoscaling for Session Cluster Jobs</a></li>
<li><a href="#improved-standalone-autoscaler">Improved Standalone Autoscaler</a></li>
<li><a href="#savepoint-trigger-nonce">Savepoint Trigger Nonce</a></li>
<li><a href="#cluster-shutdown-and-resource-cleanup-improvements">Cluster Shutdown and Resource Cleanup Improvements</a></li>
<li><a href="#custom-flink-resource-mutator">Custom Flink Resource Mutator</a></li>
<li><a href="#smaller-operator-image">Smaller Operator image</a></li>
<li><a href="#experimental-features">Experimental Features</a></li>
</ul>
</li>
<li><a href="#release-notes">Release Notes</a></li>
<li><a href="#release-resources">Release Resources</a></li>
<li><a href="#list-of-contributors">List of Contributors</a></li>
</ul>
</li>
</ul>
</nav>
</aside>
<aside class="expand-toc hidden">
<a class="toc" onclick="expandToc()" href="javascript:void(0)">
<i class="fa fa-bars" aria-hidden="true"></i>
</a>
</aside>
</main>
<footer>
<div class="separator"></div>
<div class="panels">
<div class="wrapper">
<div class="panel">
<ul>
<li>
<a href="https://flink-packages.org/">flink-packages.org</a>
</li>
<li>
<a href="https://www.apache.org/">Apache Software Foundation</a>
</li>
<li>
<a href="https://www.apache.org/licenses/">License</a>
</li>
<li>
<a href="/zh/">
<i class="fa fa-globe" aria-hidden="true"></i>&nbsp;中文版
</a>
</li>
</ul>
</div>
<div class="panel">
<ul>
<li>
<a href="/what-is-flink/security">Security</a-->
</li>
<li>
<a href="https://www.apache.org/foundation/sponsorship.html">Donate</a>
</li>
<li>
<a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
</ul>
</div>
<div class="panel icons">
<div>
<a href="/posts">
<div class="icon flink-blog-icon"></div>
<span>Flink blog</span>
</a>
</div>
<div>
<a href="https://github.com/apache/flink">
<div class="icon flink-github-icon"></div>
<span>Github</span>
</a>
</div>
<div>
<a href="https://twitter.com/apacheflink">
<div class="icon flink-twitter-icon"></div>
<span>Twitter</span>
</a>
</div>
</div>
</div>
</div>
<hr/>
<div class="container disclaimer">
<p>The contents of this website are © 2024 Apache Software Foundation under the terms of the Apache License v2. Apache Flink, Flink, and the Flink logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.</p>
</div>
</footer>
</body>
</html>