blob: e5086a1f22db247c9b85c94a273ca320230bc8b0 [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: Stateful Computations over Data Streams</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><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>
<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">
<p class="lead">
<strong>Apache Flink<sup>®</sup> — Stateful Computations over Data Streams</strong>
</p>
</div>
<div class="col-sm-12">
<hr />
</div>
</div>
<!-- High-level architecture figure -->
<div class="row front-graphic">
<hr />
<img src="/img/flink-home-graphic.png" width="800px" />
</div>
<!-- Feature grid -->
<!--
<div class="row">
<div class="col-sm-12">
<hr />
<h2><a href="/features.html">Features</a></h2>
</div>
</div>
-->
<div class="row">
<div class="col-sm-4">
<div class="panel panel-default">
<div class="panel-heading">
<span class="glyphicon glyphicon-th"></span> <b>All streaming use cases</b>
</div>
<div class="panel-body">
<ul style="font-size: small;">
<li>Event-driven Applications</li>
<li>Stream &amp; Batch Analytics</li>
<li>Data Pipelines &amp; ETL</li>
</ul>
<a href="/usecases.html">Learn more</a>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="panel panel-default">
<div class="panel-heading">
<span class="glyphicon glyphicon-ok"></span> <b>Guaranteed correctness</b>
</div>
<div class="panel-body">
<ul style="font-size: small;">
<li>Exactly-once state consistency</li>
<li>Event-time processing</li>
<li>Sophisticated late data handling</li>
</ul>
<a href="/flink-applications.html#building-blocks-for-streaming-applications">Learn more</a>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="panel panel-default">
<div class="panel-heading">
<span class="glyphicon glyphicon glyphicon-sort-by-attributes"></span> <b>Layered APIs</b>
</div>
<div class="panel-body">
<ul style="font-size: small;">
<li>SQL on Stream &amp; Batch Data</li>
<li>DataStream API &amp; DataSet API</li>
<li>ProcessFunction (Time &amp; State)</li>
</ul>
<a href="/flink-applications.html#layered-apis">Learn more</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-4">
<div class="panel panel-default">
<div class="panel-heading">
<span class="glyphicon glyphicon-dashboard"></span> <b>Operational Focus</b>
</div>
<div class="panel-body">
<ul style="font-size: small;">
<li>Flexible deployment</li>
<li>High-availability setup</li>
<li>Savepoints</li>
</ul>
<a href="/flink-operations.html">Learn more</a>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="panel panel-default">
<div class="panel-heading">
<span class="glyphicon glyphicon-fullscreen"></span> <b>Scales to any use case</b>
</div>
<div class="panel-body">
<ul style="font-size: small;">
<li>Scale-out architecture</li>
<li>Support for very large state</li>
<li>Incremental checkpointing</li>
</ul>
<a href="/flink-architecture.html#run-applications-at-any-scale">Learn more</a>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="panel panel-default">
<div class="panel-heading">
<span class="glyphicon glyphicon-flash"></span> <b>Excellent Performance</b>
</div>
<div class="panel-body">
<ul style="font-size: small;">
<li>Low latency</li>
<li>High throughput</li>
<li>In-Memory computing</li>
</ul>
<a href="/flink-architecture.html#leverage-in-memory-performance">Learn more</a>
</div>
</div>
</div>
</div>
<!-- Powered by section -->
<div class="row">
<div class="col-sm-12">
<br />
<h2><a href="/poweredby.html">Powered by Flink</a></h2>
<div class="jcarousel">
<ul>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/alibaba-logo.png" width="175" alt="Alibaba" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/aws-logo.png" width="175" alt="AWS" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/capital-one-logo.png" width="175" alt="Capital One" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/uber-logo.png" width="175" alt="Uber" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/bettercloud-logo.png" width="175" alt="BetterCloud" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/bouygues-logo.jpg" width="175" alt="Bouygues" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/comcast-logo.png" width="175" alt="Comcast" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/criteo-logo.png" width="175" alt="Criteo" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/didi-logo.png" width="175" alt="Didi" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/dtrb-logo.png" width="175" alt="Drivetribe" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/ebay-logo.png" width="175" alt="Ebay" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/ericsson-logo.png" width="175" alt="Ericsson" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/gojek-logo.png" width="175" alt="Gojek" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/huawei-logo.png" width="175" alt="Huawei" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/lyft-logo.png" width="175" alt="Lyft" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/king-logo.png" width="175" alt="King" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/klaviyo-logo.png" width="175" alt="Klaviyo" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/kuaishou-logo.jpg" width="175" alt="Kuaishou" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/mediamath-logo.png" width="175" alt="MediaMath" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/mux-logo.png" width="175" alt="Mux" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/oppo-logo.png" width="175" alt="OPPO" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/otto-group-logo.png" width="175" alt="Otto Group" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/ovh-logo.png" width="175" alt="OVH" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/pinterest-logo.png" width="175" alt="Pinterest" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/razorpay-logo.png" width="175" alt="Razorpay" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/researchgate-logo.png" width="175" alt="ResearchGate" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/sktelecom-logo.png" width="175" alt="SK telecom" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/telefonica-next-logo.png" width="175" alt="Telefonica Next" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/tencent-logo.png" width="175" alt="Tencent" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/vip-logo.png" width="175" alt="Vip" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/xiaomi-logo.png" width="175" alt="Xiaomi" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/yelp-logo.png" width="175" alt="Yelp" />
</a></div>
</li>
<li>
<div><a href="/poweredby.html">
<img src="/img/poweredby/zalando-logo.jpg" width="175" alt="Zalando" />
</a></div>
</li>
</ul>
</div>
<a href="#" class="jcarousel-control-prev" data-jcarouselcontrol="true"><span class="glyphicon glyphicon-chevron-left"></span></a>
<a href="#" class="jcarousel-control-next" data-jcarouselcontrol="true"><span class="glyphicon glyphicon-chevron-right"></span></a>
</div>
</div>
<!-- Events section -->
<div class="row">
<div class="col-sm-12">
<hr />
</div>
<div class="col-sm-3">
<h2><a>Upcoming Events</a></h2>
</div>
<div class="col-sm-9">
<!-- Flink Forward -->
<a href="https://flink-forward.org" target="_blank">
<img style="width: 200px; padding-right: 30px" src="/img/flink-forward.png" alt="Flink Forward" />
</a>
<!-- ApacheCon -->
<a href="https://www.apache.org/events/current-event" target="_blank">
<img src="https://www.apache.org/events/current-event-234x60.png" alt="ApacheCon" />
</a>
</div>
</div>
<!-- Updates section -->
<div class="row">
<div class="col-sm-12">
<hr />
</div>
<div class="col-sm-3">
<h2><a href="/blog">Latest Blog Posts</a></h2>
</div>
<div class="col-sm-9">
<dl>
<dt> <a href="/news/2020/07/06/release-1.11.0.html">Apache Flink 1.11.0 Release Announcement</a></dt>
<dd>The Apache Flink community is proud to announce the release of Flink 1.11.0! More than 200 contributors worked on over 1.3k issues to bring significant improvements to usability as well as new features to Flink users across the whole API stack. We're particularly excited about unaligned checkpoints to cope with high backpressure scenarios, a new source API that simplifies and unifies the implementation of (custom) sources, and support for Change Data Capture (CDC) and other common use cases in the Table API/SQL. Read on for all major new features and improvements, important changes to be aware of and what to expect moving forward!</dd>
<dt> <a href="/ecosystem/2020/06/23/flink-on-zeppelin-part2.html">Flink on Zeppelin Notebooks for Interactive Data Analysis - Part 2</a></dt>
<dd><p>In a previous post, we introduced the basics of Flink on Zeppelin and how to do Streaming ETL. In this second part of the “Flink on Zeppelin” series of posts, I will share how to
perform streaming data visualization via Flink on Zeppelin and how to use Apache Flink UDFs in Zeppelin.</p>
</dd>
<dt> <a href="/news/2020/06/15/flink-on-zeppelin-part1.html">Flink on Zeppelin Notebooks for Interactive Data Analysis - Part 1</a></dt>
<dd><p>The latest release of <a href="https://zeppelin.apache.org/">Apache Zeppelin</a> comes with a redesigned interpreter for Apache Flink (version Flink 1.10+ is only supported moving forward)
that allows developers to use Flink directly on Zeppelin notebooks for interactive data analysis. I wrote 2 posts about how to use Flink in Zeppelin. This is part-1 where I explain how the Flink interpreter in Zeppelin works,
and provide a tutorial for running Streaming ETL with Flink on Zeppelin.</p>
</dd>
<dt> <a href="/news/2020/06/11/community-update.html">Flink Community Update - June'20</a></dt>
<dd>And suddenly it’s June. The previous month has been calm on the surface, but quite hectic underneath — the final testing phase for Flink 1.11 is moving at full speed, Stateful Functions 2.1 is out in the wild and Flink has made it into Google Season of Docs 2020.</dd>
<dt> <a href="/news/2020/06/09/release-statefun-2.1.0.html">Stateful Functions 2.1.0 Release Announcement</a></dt>
<dd><p>The Apache Flink community is happy to announce the release of Stateful Functions (StateFun) 2.1.0! This release introduces new features around state expiration and performance improvements for co-located deployments, as well as other important changes that improve the stability and testability of the project. As the community around StateFun grows, the release cycle will follow this pattern of smaller and more frequent releases to incorporate user feedback and allow for faster iteration.</p>
</dd>
</dl>
</div>
<!-- Scripts section -->
<script type="text/javascript" src="/js/jquery.jcarousel.min.js"></script>
<script type="text/javascript">
$(window).load(function(){
$(function() {
var jcarousel = $('.jcarousel');
jcarousel
.on('jcarousel:reload jcarousel:create', function () {
var carousel = $(this),
width = carousel.innerWidth();
if (width >= 600) {
width = width / 4;
} else if (width >= 350) {
width = width / 3;
}
carousel.jcarousel('items').css('width', Math.ceil(width) + 'px');
})
.jcarousel({
wrap: 'circular',
autostart: true
});
$('.jcarousel-control-prev')
.jcarouselControl({
target: '-=1'
});
$('.jcarousel-control-next')
.jcarouselControl({
target: '+=1'
});
$('.jcarousel-pagination')
.on('jcarouselpagination:active', 'a', function() {
$(this).addClass('active');
})
.on('jcarouselpagination:inactive', 'a', function() {
$(this).removeClass('active');
})
.on('click', function(e) {
e.preventDefault();
})
.jcarouselPagination({
perPage: 1,
item: function(page) {
return '<a href="#' + page + '">' + page + '</a>';
}
});
});
});
</script>
</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>