content/2024/09/05/apache-flink-cdc-3.2.0-release-announcement/index.html (483 lines of code) (raw):
<!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/09/05/apache-flink-cdc-3.2.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 CDC 3.2.0! This release aims to improve usability and stability of existing features, including transform and schema evolution. Also, backwards-compatible code and tests have been added to help users upgrade from previous CDC versions more smoothly.
Flink CDC release packages are available at Releases Page, and documentations are available at Flink CDC documentation page. Looking forward to any feedback from the community through the Flink mailing lists or JIRA!">
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="Apache Flink CDC 3.2.0 Release Announcement" />
<meta property="og:description" content="The Apache Flink Community is excited to announce the release of Flink CDC 3.2.0! This release aims to improve usability and stability of existing features, including transform and schema evolution. Also, backwards-compatible code and tests have been added to help users upgrade from previous CDC versions more smoothly.
Flink CDC release packages are available at Releases Page, and documentations are available at Flink CDC documentation page. Looking forward to any feedback from the community through the Flink mailing lists or JIRA!" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://flink.apache.org/2024/09/05/apache-flink-cdc-3.2.0-release-announcement/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2024-09-05T08:00:00+00:00" />
<meta property="article:modified_time" content="2024-09-05T08:00:00+00:00" />
<title>Apache Flink CDC 3.2.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.6950414fdb865fa2a65062656ee52f8a1d13a0578a8866521a5e3501cdc3b475.js" integrity="sha256-aVBBT9uGX6KmUGJlbuUvih0ToFeKiGZSGl41Ac3DtHU="></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 2.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-docs-lts/">Flink 1.20 (LTS)<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.11 (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.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-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/09/05/apache-flink-cdc-3.2.0-release-announcement/">Apache Flink CDC 3.2.0 Release Announcement</a>
</h1>
September 5, 2024 -
Xiqian Yu
Qingsheng Ren
<a href="https://twitter.com/renqstuite">(@renqstuite)</a>
<p><p>The Apache Flink Community is excited to announce the release of Flink CDC 3.2.0!
This release aims to improve usability and stability of existing features,
including transform and schema evolution.
Also, backwards-compatible code and tests have been added to help users upgrade from previous CDC versions more smoothly.</p>
<p>Flink CDC release packages are available at <a href="https://flink.apache.org/downloads.html#flink-cdc">Releases Page</a>,
and documentations are available at <a href="https://nightlies.apache.org/flink/flink-cdc-docs-release-3.2">Flink CDC documentation</a> page.
Looking forward to any feedback from 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>!</p>
<h1 id="highlights">
Highlights
<a class="anchor" href="#highlights">#</a>
</h1>
<h2 id="connectors">
Connectors
<a class="anchor" href="#connectors">#</a>
</h2>
<h3 id="new-pipeline-connectors">
New Pipeline Connectors
<a class="anchor" href="#new-pipeline-connectors">#</a>
</h3>
<p>Flink CDC 3.2.0 introduces 1 new pipeline connector:</p>
<ul>
<li>Elasticsearch sink (verified on Elasticsearch 6.8, 7.10, and 8.12)</li>
</ul>
<h3 id="apache-paimon">
Apache Paimon
<a class="anchor" href="#apache-paimon">#</a>
</h3>
<p>Paimon connector has bumped its dependency to an up-to-date version and could benefit from all bug fixes and improvements.
Also, there are other improvements including:</p>
<ul>
<li>Added dynamic bucket mode support for data distribution cases.</li>
<li>Handle specified column positions correctly.</li>
<li>Fixed duplicate commit issue after failover.</li>
</ul>
<h3 id="apache-kafka">
Apache Kafka
<a class="anchor" href="#apache-kafka">#</a>
</h3>
<p>Now, it is possible to configure Kafka partitioning strategy with new <code>key.format</code> and <code>partition.strategy</code> configurations.</p>
<h3 id="mysql">
MySQL
<a class="anchor" href="#mysql">#</a>
</h3>
<ul>
<li><code>AlterColumnTypeEvent</code> could be correctly parsed from <code>MODIFY COLUMN</code> DDL.</li>
<li>Assigning any column as snapshot chunk column is supported in both pipeline and source connector.</li>
<li>Fixed a bug that may cause infinite hanging with timestamp startup mode</li>
</ul>
<h3 id="mongodb">
MongoDB
<a class="anchor" href="#mongodb">#</a>
</h3>
<ul>
<li>MongoDB CDC connector has been tested and verified on MongoDB 7.x.</li>
</ul>
<h2 id="kubernetes-deployment-mode">
Kubernetes Deployment Mode
<a class="anchor" href="#kubernetes-deployment-mode">#</a>
</h2>
<p>Now it is possible to deploy a YAML pipeline job to Kubernetes cluster with CDC CLI.
See <a href="https://nightlies.apache.org/flink/flink-cdc-docs-release-3.2/docs/deployment/kubernetes/">Deployment Docs</a> for more details.</p>
<h2 id="customizable-schema-evolution">
Customizable Schema Evolution
<a class="anchor" href="#customizable-schema-evolution">#</a>
</h2>
<p>More customizable schema evolution modes have been added.
Now, apart from existing “Evolve”, “Ignore”, and “Exception” mode, a pipeline job could be configured as:</p>
<h3 id="lenient-mode">
“Lenient” Mode
<a class="anchor" href="#lenient-mode">#</a>
</h3>
<p>Similar to “TryEvolve” mode, but it always keeps original table structure as a part of evolved schema, which guarantees lossless recoverability from job fail-over.</p>
<p>In this mode, pipeline will ignore all <code>DropColumnEvent</code>s, and insert <code>NULL</code> values to fill in the gap.
Also, <code>AddColumnEvent</code>s will be relocated to the end of the table to maximize compatibility with those sinks that don’t allow inserting new columns arbitrarily.</p>
<blockquote>
<p>Note: This is the default schema change behavior now. You may override it with <code>pipeline.schema.change.behavior</code> configuration.</p>
</blockquote>
<h3 id="tryevolve-mode">
“TryEvolve” Mode
<a class="anchor" href="#tryevolve-mode">#</a>
</h3>
<p>Always do schema evolution attempts, but evolution failures will be tolerated.</p>
<p>In this mode, if a schema change event wasn’t applied to downstream successfully, pipeline will tolerate the failure and allow the job running by appending <code>NULL</code> or trimming original data.</p>
<blockquote>
<p>Note: Using TryEvolve mode might potentially drop some data when some schema change requests failed. Use <code>Evolve</code> or <code>Lenient</code> if it’s unacceptable.</p>
</blockquote>
<h3 id="per-type-configuration">
Per-type Configuration
<a class="anchor" href="#per-type-configuration">#</a>
</h3>
<p>Also, it is possible to enable / disable some types of schema evolution events with the following syntax:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">sink</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">include.schema.changes</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">column]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">exclude.schema.changes</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">alter, drop]</span><span class="w">
</span></span></span></code></pre></div><p>Here, only <code>AddColumnEvent</code> and <code>RenameColumnEvent</code> will be applied to downstream. (<code>AlterColumnTypeEvent</code> and <code>DropColumnEvent</code> are excluded explicitly.)</p>
<h2 id="enhanced-transform">
Enhanced Transform
<a class="anchor" href="#enhanced-transform">#</a>
</h2>
<p>Transform feature was initially shipped with CDC 3.1.0, with a few known limitations and quirks that needs attention when writing rules.
Most of them have been fixed in this release, including:</p>
<ul>
<li>Provided new <code>CAST ... AS ...</code> built-in function to cast values to specified types.</li>
<li>Calculation columns could reference columns omitted from projection result now.</li>
<li>Calculation columns could shade upstream columns now.</li>
<li>Built-in temporary functions have the same semantic with Flink SQL now.</li>
<li>Transform rules could work with routing rules now.</li>
<li>Transform could handle upstream schema changes now.</li>
</ul>
<h2 id="transform-udf-support">
Transform UDF Support
<a class="anchor" href="#transform-udf-support">#</a>
</h2>
<p>Now, it is possible to declare a customizable UDF by implementing <code>org.apache.flink.cdc.common.udf.UserDefinedFunction</code> interface, and reference them in projection and filtering expressions like built-in functions.
UDFs are defined in pipeline level, and could be used in all transform blocks:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">transform</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">source-table</span><span class="p">:</span><span class="w"> </span><span class="l">db.tbl</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">projection</span><span class="p">:</span><span class="w"> </span><span class="s2">"fmt('id -> %d', id) as fmt_id"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">filter</span><span class="p">:</span><span class="w"> </span><span class="s2">"inc(id) < 100"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">pipeline</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">user-defined-function</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">inc</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">classpath</span><span class="p">:</span><span class="w"> </span><span class="l">org.apache.flink.cdc.udf.examples.java.AddOneFunctionClass</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">fmt</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">classpath</span><span class="p">:</span><span class="w"> </span><span class="l">org.apache.flink.cdc.udf.examples.java.FormatFunctionClass</span><span class="w">
</span></span></span></code></pre></div><p>Plain Flink SQL Scalar Functions could be used with no modification. See <a href="https://nightlies.apache.org/flink/flink-cdc-docs-release-3.2/docs/core-concept/transform/#user-defined-functions">UDF docs</a> for more details.</p>
<h2 id="complex-routing-rules">
Complex Routing Rules
<a class="anchor" href="#complex-routing-rules">#</a>
</h2>
<p>Route operator has been improved to allow declaring more complicated route topologies:</p>
<ul>
<li>Routing one table to multiple sink tables (broadcasting) is supported now.</li>
<li>One can define multiple parallel routing rules in batch with pattern replacing symbols.</li>
</ul>
<h1 id="list-of-contributors">
List of Contributors
<a class="anchor" href="#list-of-contributors">#</a>
</h1>
<p>We would like to express gratitude to all the contributors working on this release:</p>
<p>ChengJie1053, ConradJam, FangXiangmin, GOODBOY008, Hang Ruan, He Wang, Hongshun Wang, Jiabao Sun, Joao Boto, Junbo wang, Kunni, Laffery, Leonard Xu, MOBIN, Muhammet Orazov, North Lin, PONYLEE, Paul Lin, Qingsheng Ren, SeungMin, Shawn Huang, Thorne, Wink, Xie Yi, Xin Gong, Zhongmin Qiao, Zmm, gong, gongzhongqiang, hk__lrzy, joyCurry30, lipl, lvyanquan, ouyangwulin, skylines, wuzexian, yanghuaiGit, yux, yuxiqian, 鼎昕</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-09-05-release-cdc-3.2.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><a href="#highlights">Highlights</a>
<ul>
<li><a href="#connectors">Connectors</a>
<ul>
<li><a href="#new-pipeline-connectors">New Pipeline Connectors</a></li>
<li><a href="#apache-paimon">Apache Paimon</a></li>
<li><a href="#apache-kafka">Apache Kafka</a></li>
<li><a href="#mysql">MySQL</a></li>
<li><a href="#mongodb">MongoDB</a></li>
</ul>
</li>
<li><a href="#kubernetes-deployment-mode">Kubernetes Deployment Mode</a></li>
<li><a href="#customizable-schema-evolution">Customizable Schema Evolution</a>
<ul>
<li><a href="#lenient-mode">“Lenient” Mode</a></li>
<li><a href="#tryevolve-mode">“TryEvolve” Mode</a></li>
<li><a href="#per-type-configuration">Per-type Configuration</a></li>
</ul>
</li>
<li><a href="#enhanced-transform">Enhanced Transform</a></li>
<li><a href="#transform-udf-support">Transform UDF Support</a></li>
<li><a href="#complex-routing-rules">Complex Routing Rules</a></li>
</ul>
</li>
<li><a href="#list-of-contributors">List of Contributors</a></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> 中文版
</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>