blob: 16553d356bac8fbe72e1b91bb5a3c73e5a3e75b6 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Apache Flink: Flink Community Update - May'20</title>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<!-- Bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<link rel="stylesheet" href="/css/flink.css">
<link rel="stylesheet" href="/css/syntax.css">
<!-- Blog RSS feed -->
<link href="/blog/feed.xml" rel="alternate" type="application/rss+xml" title="Apache Flink Blog: RSS feed" />
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<!-- We need to load Jquery in the header for custom google analytics event tracking-->
<script src="/js/jquery.min.js"></script>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!-- Main content. -->
<div class="container">
<div class="row">
<div id="sidebar" class="col-sm-3">
<!-- Top navbar. -->
<nav class="navbar navbar-default">
<!-- The logo. -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="navbar-logo">
<a href="/">
<img alt="Apache Flink" src="/img/flink-header-logo.svg" width="147px" height="73px">
</a>
</div>
</div><!-- /.navbar-header -->
<!-- The navigation links. -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-main">
<!-- First menu section explains visitors what Flink is -->
<!-- What is Stream Processing? -->
<!--
<li><a href="/streamprocessing1.html">What is Stream Processing?</a></li>
-->
<!-- What is Flink? -->
<li><a href="/flink-architecture.html">What is Apache Flink?</a></li>
<!-- What is Stateful Functions? -->
<li><a href="/stateful-functions.html">What is Stateful Functions?</a></li>
<!-- Use cases -->
<li><a href="/usecases.html">Use Cases</a></li>
<!-- Powered by -->
<li><a href="/poweredby.html">Powered By</a></li>
&nbsp;
<!-- Second menu section aims to support Flink users -->
<!-- Downloads -->
<li><a href="/downloads.html">Downloads</a></li>
<!-- Getting Started -->
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Getting Started<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="https://ci.apache.org/projects/flink/flink-docs-release-1.11/getting-started/index.html" target="_blank">With Flink <small><span class="glyphicon glyphicon-new-window"></span></small></a></li>
<li><a href="https://ci.apache.org/projects/flink/flink-statefun-docs-release-2.1/getting-started/project-setup.html" target="_blank">With Flink Stateful Functions <small><span class="glyphicon glyphicon-new-window"></span></small></a></li>
<li><a href="/training.html">Training Course</a></li>
</ul>
</li>
<!-- Documentation -->
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Documentation<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="https://ci.apache.org/projects/flink/flink-docs-release-1.11" target="_blank">Flink 1.11 (Latest stable release) <small><span class="glyphicon glyphicon-new-window"></span></small></a></li>
<li><a href="https://ci.apache.org/projects/flink/flink-docs-master" target="_blank">Flink Master (Latest Snapshot) <small><span class="glyphicon glyphicon-new-window"></span></small></a></li>
<li><a href="https://ci.apache.org/projects/flink/flink-statefun-docs-release-2.1" target="_blank">Flink Stateful Functions 2.1 (Latest stable release) <small><span class="glyphicon glyphicon-new-window"></span></small></a></li>
<li><a href="https://ci.apache.org/projects/flink/flink-statefun-docs-master" target="_blank">Flink Stateful Functions Master (Latest Snapshot) <small><span class="glyphicon glyphicon-new-window"></span></small></a></li>
</ul>
</li>
<!-- getting help -->
<li><a href="/gettinghelp.html">Getting Help</a></li>
<!-- Blog -->
<li class="active"><a href="/blog/"><b>Flink Blog</b></a></li>
<!-- Flink-packages -->
<li>
<a href="https://flink-packages.org" target="_blank">flink-packages.org <small><span class="glyphicon glyphicon-new-window"></span></small></a>
</li>
&nbsp;
<!-- Third menu section aim to support community and contributors -->
<!-- Community -->
<li><a href="/community.html">Community &amp; Project Info</a></li>
<!-- Roadmap -->
<li><a href="/roadmap.html">Roadmap</a></li>
<!-- Contribute -->
<li><a href="/contributing/how-to-contribute.html">How to Contribute</a></li>
<!-- GitHub -->
<li>
<a href="https://github.com/apache/flink" target="_blank">Flink on GitHub <small><span class="glyphicon glyphicon-new-window"></span></small></a>
</li>
&nbsp;
<!-- Language Switcher -->
<li>
<!-- link to the Chinese home page when current is blog page -->
<a href="/zh">中文版</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-bottom">
<hr />
<!-- Twitter -->
<li><a href="https://twitter.com/apacheflink" target="_blank">@ApacheFlink <small><span class="glyphicon glyphicon-new-window"></span></small></a></li>
<!-- Visualizer -->
<li class=" hidden-md hidden-sm"><a href="/visualizer/" target="_blank">Plan Visualizer <small><span class="glyphicon glyphicon-new-window"></span></small></a></li>
<hr />
<li><a href="https://apache.org" target="_blank">Apache Software Foundation <small><span class="glyphicon glyphicon-new-window"></span></small></a></li>
<li>
<style>
.smalllinks:link {
display: inline-block !important; background: none; padding-top: 0px; padding-bottom: 0px; padding-right: 0px; min-width: 75px;
}
</style>
<a class="smalllinks" href="https://www.apache.org/licenses/" target="_blank">License</a> <small><span class="glyphicon glyphicon-new-window"></span></small>
<a class="smalllinks" href="https://www.apache.org/security/" target="_blank">Security</a> <small><span class="glyphicon glyphicon-new-window"></span></small>
<a class="smalllinks" href="https://www.apache.org/foundation/sponsorship.html" target="_blank">Donate</a> <small><span class="glyphicon glyphicon-new-window"></span></small>
<a class="smalllinks" href="https://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a> <small><span class="glyphicon glyphicon-new-window"></span></small>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</nav>
</div>
<div class="col-sm-9">
<div class="row-fluid">
<div class="col-sm-12">
<div class="row">
<h1>Flink Community Update - May'20</h1>
<p><i></i></p>
<article>
<p>07 May 2020 Marta Paes (<a href="https://twitter.com/morsapaes">@morsapaes</a>)</p>
<p>Can you smell it? It’s release month! It took a while, but now that we’re <a href="https://flink.apache.org/news/2020/04/01/community-update.html">all caught up with the past</a>, the Community Update is here to stay. This time around, we’re warming up for Flink 1.11 and peeping back to the month of April in the Flink community — with the release of Stateful Functions 2.0, a new self-paced Flink training and some efforts to improve the Flink documentation experience.</p>
<p>Last month also marked the debut of Flink Forward Virtual Conference 2020: what did you think? If you missed it altogether or just want to recap some of the sessions, the <a href="https://www.youtube.com/playlist?list=PLDX4T_cnKjD0ngnBSU-bYGfgVv17MiwA7">videos</a> and <a href="https://www.slideshare.net/FlinkForward">slides</a> are now available!</p>
<div class="page-toc">
<ul id="markdown-toc">
<li><a href="#the-past-month-in-flink" id="markdown-toc-the-past-month-in-flink">The Past Month in Flink</a> <ul>
<li><a href="#flink-stateful-functions-20-is-out" id="markdown-toc-flink-stateful-functions-20-is-out">Flink Stateful Functions 2.0 is out!</a></li>
<li><a href="#warming-up-for-flink-111" id="markdown-toc-warming-up-for-flink-111">Warming up for Flink 1.11</a></li>
<li><a href="#flink-minor-releases" id="markdown-toc-flink-minor-releases">Flink Minor Releases</a> <ul>
<li><a href="#flink-193" id="markdown-toc-flink-193">Flink 1.9.3</a></li>
<li><a href="#flink-1101" id="markdown-toc-flink-1101">Flink 1.10.1</a></li>
</ul>
</li>
<li><a href="#new-committers-and-pmc-members" id="markdown-toc-new-committers-and-pmc-members">New Committers and PMC Members</a> <ul>
<li><a href="#new-pmc-members" id="markdown-toc-new-pmc-members">New PMC Members</a></li>
<li><a href="#new-committers" id="markdown-toc-new-committers">New Committers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#the-bigger-picture" id="markdown-toc-the-bigger-picture">The Bigger Picture</a> <ul>
<li><a href="#a-new-self-paced-apache-flink-training" id="markdown-toc-a-new-self-paced-apache-flink-training">A new self-paced Apache Flink training</a></li>
<li><a href="#google-season-of-docs-2020" id="markdown-toc-google-season-of-docs-2020">Google Season of Docs 2020</a></li>
</ul>
</li>
<li><a href="#and-something-to-read" id="markdown-toc-and-something-to-read">…and something to read!</a></li>
</ul>
</div>
<h1 id="the-past-month-in-flink">The Past Month in Flink</h1>
<h2 id="flink-stateful-functions-20-is-out">Flink Stateful Functions 2.0 is out!</h2>
<p>In the beginning of April, the Flink community announced the <a href="https://flink.apache.org/news/2020/04/07/release-statefun-2.0.0.html">release of Stateful Functions 2.0</a> — the first as part of the Apache Flink project. From this release, you can use Flink as the base of a (stateful) serverless platform with out-of-the-box consistent and scalable state, and efficient messaging between functions. You can even run your stateful functions on platforms like AWS Lambda, as Gordon (<a href="https://twitter.com/tzulitai">@tzulitai</a>) demonstrated in <a href="https://www.youtube.com/watch?v=tuSylBadNSo&amp;list=PLDX4T_cnKjD0ngnBSU-bYGfgVv17MiwA7&amp;index=27&amp;t=8s">his Flink Forward talk</a>.</p>
<div style="line-height:60%;">
<br />
</div>
<center>
<img src="/img/blog/2020-05-06-community-update/2020-05-06-community-update_2.png" width="550px" alt="Stateful Functions" />
</center>
<div style="line-height:60%;">
<br />
</div>
<p>It’s been encouraging to see so many questions about Stateful Functions popping up in the <a href="https://lists.apache.org/list.html?user@flink.apache.org:lte=3M:statefun">mailing list</a> and Stack Overflow! If you’d like to get involved, we’re always <a href="https://github.com/apache/flink-statefun#contributing">looking for new contributors</a> — especially around SDKs for other languages like Go, Javascript and Rust.</p>
<hr />
<h2 id="warming-up-for-flink-111">Warming up for Flink 1.11</h2>
<p>The final preparations for the release of Flink 1.11 are well underway, with the feature freeze scheduled for May 15th, and there’s a lot of new features and improvements to look out for:</p>
<ul>
<li>
<p>On the <strong>usability</strong> side, you can expect a big focus on smoothing data ingestion with contributions like support for Change Data Capture (CDC) in the Table API/SQL (<a href="https://cwiki.apache.org/confluence/display/FLINK/FLIP-105%3A+Support+to+Interpret+and+Emit+Changelog+in+Flink+SQL">FLIP-105</a>), easy streaming data ingestion into Apache Hive (<a href="https://cwiki.apache.org/confluence/display/FLINK/FLIP-115%3A+Filesystem+connector+in+Table">FLIP-115</a>) or support for Pandas DataFrames in PyFlink (<a href="https://cwiki.apache.org/confluence/display/FLINK/FLIP-120%3A+Support+conversion+between+PyFlink+Table+and+Pandas+DataFrame">FLIP-120</a>). A great deal of effort has also gone into maturing PyFlink, with the introduction of user defined metrics in Python UDFs (<a href="https://cwiki.apache.org/confluence/display/FLINK/FLIP-112%3A+Support+User-Defined+Metrics+in++Python+UDF">FLIP-112</a>) and the extension of Python UDF support beyond the Python Table API (<a href="https://cwiki.apache.org/confluence/display/FLINK/FLIP-106%3A+Support+Python+UDF+in+SQL+Function+DDL">FLIP-106</a>,<a href="https://cwiki.apache.org/confluence/display/FLINK/FLIP-114%3A+Support+Python+UDF+in+SQL+Client">FLIP-114</a>).</p>
</li>
<li>
<p>On the <strong>operational</strong> side, the much anticipated new Source API (<a href="https://cwiki.apache.org/confluence/display/FLINK/FLIP-27%3A+Refactor+Source+Interface">FLIP-27</a>) will unify batch and streaming sources, and improve out-of-the-box event-time behavior; while unaligned checkpoints (<a href="https://cwiki.apache.org/confluence/display/FLINK/FLIP-76%3A+Unaligned+Checkpoints">FLIP-76</a>) and changes to network memory management will allow to speed up checkpointing under backpressure — this is part of a bigger effort to rethink fault tolerance that will introduce many other non-trivial changes to Flink. You can learn more about it in <a href="https://youtu.be/ssEmeLcL5Uk">this</a> recent Flink Forward talk!</p>
</li>
</ul>
<p>Throw into the mix improvements around type systems, the WebUI, metrics reporting, supported formats and…we can’t wait! To get an overview of the ongoing developments, have a look at <a href="http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/ANNOUNCE-Development-progress-of-Apache-Flink-1-11-tp40718.html">this thread</a>. We encourage the community to get involved in testing once an RC (Release Candidate) is out. Keep an eye on the <a href="https://flink.apache.org/community.html#mailing-lists">@dev mailing list</a> for updates!</p>
<hr />
<h2 id="flink-minor-releases">Flink Minor Releases</h2>
<h3 id="flink-193">Flink 1.9.3</h3>
<p>The community released Flink 1.9.3, covering some outstanding bugs from Flink 1.9! You can find more in the <a href="(https://flink.apache.org/news/2020/04/24/release-1.9.3.html)">announcement blogpost</a>.</p>
<h3 id="flink-1101">Flink 1.10.1</h3>
<p>Also in the pipeline is the release of Flink 1.10.1, already in the <a href="http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-Release-1-10-1-release-candidate-2-td41019.html">RC voting</a> phase. So, you can expect Flink 1.10.1 to be released soon!</p>
<hr />
<h2 id="new-committers-and-pmc-members">New Committers and PMC Members</h2>
<p>The Apache Flink community has welcomed <strong>3 PMC Members</strong> and <strong>2 new Committers</strong> since the last update. Congratulations!</p>
<h3 id="new-pmc-members">New PMC Members</h3>
<div class="row">
<div class="col-lg-3">
<div class="text-center">
<img class="img-circle" src="https://avatars2.githubusercontent.com/u/6242259?s=400&amp;u=6e39f4fdbabc8ce4ccde9125166f791957d3ae80&amp;v=4" width="90" height="90" />
<p><a href="https://twitter.com/dwysakowicz">Dawid Wysakowicz</a></p>
</div>
</div>
<div class="col-lg-3">
<div class="text-center">
<img class="img-circle" src="https://avatars1.githubusercontent.com/u/4971479?s=400&amp;u=49d4f217e26186606ab13a17a23a038b62b86682&amp;v=4" width="90" height="90" />
<p><a href="https://twitter.com/HequnC">Hequn Cheng</a></p>
</div>
</div>
<div class="col-lg-3">
<div class="text-center">
<img class="img-circle" src="https://avatars3.githubusercontent.com/u/12387855?s=400&amp;u=37edbfccb6908541f359433f420f9f1bc25bc714&amp;v=4" width="90" height="90" />
<p>Zhijiang Wang</p>
</div>
</div>
</div>
<h3 id="new-committers">New Committers</h3>
<div class="row">
<div class="col-lg-3">
<div class="text-center">
<img class="img-circle" src="https://avatars3.githubusercontent.com/u/11538663?s=400&amp;u=f4643f1981e2a8f8a1962c34511b0d32a31d9502&amp;v=4" width="90" height="90" />
<p><a href="https://twitter.com/snntrable">Konstantin Knauf</a></p>
</div>
</div>
<div class="col-lg-3">
<div class="text-center">
<img class="img-circle" src="https://avatars1.githubusercontent.com/u/1891970?s=400&amp;u=b7718355ceb1f4a8d1e554c3ae7221e2f32cc8e0&amp;v=4" width="90" height="90" />
<p><a href="https://twitter.com/sjwiesman">Seth Wiesman</a></p>
</div>
</div>
</div>
<hr />
<h1 id="the-bigger-picture">The Bigger Picture</h1>
<h2 id="a-new-self-paced-apache-flink-training">A new self-paced Apache Flink training</h2>
<div style="line-height:60%;">
<br />
</div>
<p>This week, the Flink website received the invaluable contribution of a self-paced training course curated by David (<a href="https://twitter.com/alpinegizmo">@alpinegizmo</a>) — or, what used to be the entire training materials under <a href="training.ververica.com">training.ververica.com</a>. The new materials guide you through the very basics of Flink and the DataStream API, and round off every concepts section with hands-on exercises to help you better assimilate what you learned.</p>
<div style="line-height:60%;">
<br />
</div>
<center>
<img src="/img/blog/2020-05-06-community-update/2020-05-06-community-update_1.png" width="1000px" alt="Self-paced Flink Training" />
</center>
<div style="line-height:140%;">
<br />
</div>
<p>Whether you’re new to Flink or just looking to strengthen your foundations, this training is the most comprehensive way to get started and is now completely open source: <a href="https://flink.apache.org/training.html">https://flink.apache.org/training.html</a>. For now, the materials are only available in English, but the community intends to also provide a Chinese translation in the future.</p>
<hr />
<h2 id="google-season-of-docs-2020">Google Season of Docs 2020</h2>
<p>Google Season of Docs (GSOD) is a great initiative organized by <a href="https://opensource.google.com/">Google Open Source</a> to pair technical writers with mentors to work on documentation for open source projects. Last year, the Flink community submitted <a href="https://flink.apache.org/news/2019/04/17/sod.html">an application</a> that unfortunately didn’t make the cut — but we are trying again! This time, with a project idea to improve the Table API &amp; SQL documentation:</p>
<p><strong>1) Restructure the Table API &amp; SQL Documentation</strong></p>
<p>Reworking the current documentation structure would allow to:</p>
<ul>
<li>
<p>Lower the entry barrier to Flink for non-programmatic (i.e. SQL) users.</p>
</li>
<li>
<p>Make the available features more easily discoverable.</p>
</li>
<li>
<p>Improve the flow and logical correlation of topics.</p>
</li>
</ul>
<p><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=127405685">FLIP-60</a> contains a detailed proposal on how to reorganize the existing documentation, which can be used as a starting point.</p>
<p><strong>2) Extend the Table API &amp; SQL Documentation</strong></p>
<p>Some areas of the documentation have insufficient detail or are not <a href="https://flink.apache.org/contributing/docs-style.html#general-guiding-principles">accessible</a> for new Flink users. Examples of topics and sections that require attention are: planners, built-in functions, connectors, overview and concepts sections. There is a lot of work to be done and the technical writer could choose what areas to focus on — these improvements could then be added to the documentation rework umbrella issue (<a href="https://issues.apache.org/jira/browse/FLINK-12639">FLINK-12639</a>).</p>
<p>If you’re interested in learning more about this project idea or want to get involved in GSoD as a technical writer, check out the <a href="https://flink.apache.org/news/2020/05/04/season-of-docs.html">announcement blogpost</a>.</p>
<hr />
<h1 id="and-something-to-read">…and something to read!</h1>
<p>Events across the globe have pretty much come to a halt, so we’ll leave you with some interesting resources to read and explore instead. In addition to this written content, you can also recap the sessions from the <a href="https://www.youtube.com/playlist?list=PLDX4T_cnKjD0ngnBSU-bYGfgVv17MiwA7">Flink Forward Virtual Conference</a>!</p>
<table class="table table-bordered">
<thead>
<tr>
<th>Type</th>
<th>Links</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="glyphicon glyphicon glyphicon-bookmark" aria-hidden="true"></span> Blogposts</td>
<td><ul>
<li><a href="https://medium.com/@abdelkrim.hadjidj/event-driven-supply-chain-for-crisis-with-flinksql-be80cb3ad4f9">Event-Driven Supply Chain for Crisis with FlinkSQL and Zeppelin</a></li>
</ul>
<ul>
<li><a href="https://flink.apache.org/news/2020/04/21/memory-management-improvements-flink-1.10.html">Memory Management Improvements with Apache Flink 1.10</a></li>
<li><a href="https://flink.apache.org/news/2020/04/15/flink-serialization-tuning-vol-1.html">Flink Serialization Tuning Vol. 1: Choosing your Serializer — if you can</a></li>
</ul>
</td>
</tr>
<tr>
<td><span class="glyphicon glyphicon-console" aria-hidden="true"></span> Tutorials</td>
<td><ul>
<li><a href="https://flink.apache.org/2020/04/09/pyflink-udf-support-flink.html">PyFlink: Introducing Python Support for UDFs in Flink's Table API</a></li>
<li><a href="https://dev.to/morsapaes/flink-stateful-functions-where-to-start-2j39">Flink Stateful Functions: where to start?</a></li>
</ul>
</td>
</tr>
<tr>
<td><span class="glyphicon glyphicon glyphicon-certificate" aria-hidden="true"></span> Flink Packages</td>
<td><ul><p><a href="https://flink-packages.org/">Flink Packages</a> is a website where you can explore (and contribute to) the Flink <br /> ecosystem of connectors, extensions, APIs, tools and integrations. <b>New in:</b> </p>
<li><a href="https://flink-packages.org/packages/spillable-state-backend-for-flink">Spillable State Backend for Flink</a></li>
<li><a href="https://flink-packages.org/packages/flink-memory-calculator">Flink Memory Calculator</a></li>
<li><a href="https://flink-packages.org/packages/ververica-platform-community-edition">Ververica Platform Community Edition</a></li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>If you’d like to keep a closer eye on what’s happening in the community, subscribe to the Flink <a href="https://flink.apache.org/community.html#mailing-lists">@community mailing list</a> to get fine-grained weekly updates, upcoming event announcements and more.</p>
</article>
</div>
<div class="row">
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'stratosphere-eu'; // required: replace example with your forum shortname
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
</div>
</div>
</div>
</div>
</div>
<hr />
<div class="row">
<div class="footer text-center col-sm-12">
<p>Copyright © 2014-2019 <a href="http://apache.org">The Apache Software Foundation</a>. All Rights Reserved.</p>
<p>Apache Flink, Flink®, Apache®, the squirrel logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation.</p>
<p><a href="/privacy-policy.html">Privacy Policy</a> &middot; <a href="/blog/feed.xml">RSS feed</a></p>
</div>
</div>
</div><!-- /.container -->
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.matchHeight/0.7.0/jquery.matchHeight-min.js"></script>
<script src="/js/codetabs.js"></script>
<script src="/js/stickysidebar.js"></script>
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-52545728-1', 'auto');
ga('send', 'pageview');
</script>
</body>
</html>