blob: cbb793456d85574bd3f713220c39b5bf52893459 [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: 数据流上的有状态计算</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="/zh/">
<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="/zh/streamprocessing1.html">What is Stream Processing?</a></li>
-->
<!-- What is Flink? -->
<li><a href="/zh/flink-architecture.html">Apache Flink 是什么?</a></li>
<!-- What is Stateful Functions? -->
<li><a href="/zh/stateful-functions.html">What is Stateful Functions?</a></li>
<!-- Use cases -->
<li><a href="/zh/usecases.html">应用场景</a></li>
<!-- Powered by -->
<li><a href="/zh/poweredby.html">Flink 用户</a></li>
&nbsp;
<!-- Second menu section aims to support Flink users -->
<!-- Downloads -->
<li><a href="/zh/downloads.html">下载</a></li>
<!-- Getting Started -->
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">教程<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="https://ci.apache.org/projects/flink/flink-docs-release-1.11/zh/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="/zh/training.html">Training Course</a></li>
</ul>
</li>
<!-- Documentation -->
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">文档<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="/zh/gettinghelp.html">获取帮助</a></li>
<!-- Blog -->
<li><a href="/blog/"><b>Flink 博客</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="/zh/community.html">社区 &amp; 项目信息</a></li>
<!-- Roadmap -->
<li><a href="/zh/roadmap.html">开发计划</a></li>
<!-- Contribute -->
<li><a href="/zh/contributing/how-to-contribute.html">如何参与贡献</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="/">English</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> - 数据流上的有状态计算</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="/zh/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>所有流式场景</b>
</div>
<div class="panel-body">
<ul style="font-size: small;">
<li>事件驱动应用</li>
<li>流批分析</li>
<li>数据管道 &amp; ETL</li>
</ul>
<a href="/zh/usecases.html">了解更多</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>正确性保证</b>
</div>
<div class="panel-body">
<ul style="font-size: small;">
<li>Exactly-once 状态一致性</li>
<li>事件时间处理</li>
<li>成熟的迟到数据处理</li>
</ul>
<a href="/zh/flink-applications.html#building-blocks-for-streaming-applications">了解更多</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>分层 API</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="/zh/flink-applications.html#layered-apis">了解更多</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>聚焦运维</b>
</div>
<div class="panel-body">
<ul style="font-size: small;">
<li>灵活部署</li>
<li>高可用</li>
<li>保存点</li>
</ul>
<a href="/zh/flink-operations.html">了解更多</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>大规模计算</b>
</div>
<div class="panel-body">
<ul style="font-size: small;">
<li>水平扩展架构</li>
<li>支持超大状态</li>
<li>增量检查点机制</li>
</ul>
<a href="/zh/flink-architecture.html#run-applications-at-any-scale">了解更多</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>性能卓越</b>
</div>
<div class="panel-body">
<ul style="font-size: small;">
<li>低延迟</li>
<li>高吞吐</li>
<li>内存计算</li>
</ul>
<a href="/zh/flink-architecture.html#leverage-in-memory-performance">了解更多</a>
</div>
</div>
</div>
</div>
<!-- Powered by section -->
<div class="row">
<div class="col-sm-12">
<br />
<h2><a href="/zh/poweredby.html">Apache Flink 用户</a></h2>
<div class="jcarousel">
<ul>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/alibaba-logo.png" width="175" alt="Alibaba" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/aws-logo.png" width="175" alt="AWS" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/capital-one-logo.png" width="175" alt="Capital One" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/uber-logo.png" width="175" alt="Uber" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/bettercloud-logo.png" width="175" alt="BetterCloud" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/bouygues-logo.jpg" width="175" alt="Bouygues" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/comcast-logo.png" width="175" alt="Comcast" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/criteo-logo.png" width="175" alt="Criteo" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/didi-logo.png" width="175" alt="Didi" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/dtrb-logo.png" width="175" alt="Drivetribe" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/ebay-logo.png" width="175" alt="Ebay" />
</a></div>
</li>
<li>
<div><a href="/zh/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="/zh/poweredby.html">
<img src="/img/poweredby/huawei-logo.png" width="175" alt="Huawei" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/lyft-logo.png" width="175" alt="Lyft" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/king-logo.png" width="175" alt="King" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/klaviyo-logo.png" width="175" alt="Klaviyo" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/kuaishou-logo.jpg" width="175" alt="Kuaishou" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/mediamath-logo.png" width="175" alt="MediaMath" />
</a></div>
</li>
<li>
<div><a href="/zh/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="/zh/poweredby.html">
<img src="/img/poweredby/otto-group-logo.png" width="175" alt="Otto Group" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/ovh-logo.png" width="175" alt="OVH" />
</a></div>
</li>
<li>
<div><a href="/zh/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/pinterest-logo.png" width="175" alt="Pinterest" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/researchgate-logo.png" width="175" alt="ResearchGate" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/sktelecom-logo.png" width="175" alt="SK telecom" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/telefonica-next-logo.png" width="175" alt="Telefonica Next" />
</a></div>
</li>
<li>
<div><a href="/zh/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="/zh/poweredby.html">
<img src="/img/poweredby/xiaomi-logo.png" width="175" alt="Xiaomi" />
</a></div>
</li>
<li>
<div><a href="/zh/poweredby.html">
<img src="/img/poweredby/yelp-logo.png" width="175" alt="Yelp" />
</a></div>
</li>
<li>
<div><a href="/zh/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">最新博客列表</a></h2>
</div>
<div class="col-sm-9">
<dl>
<dt> <a href="/news/2020/07/21/release-1.11.1.html">Apache Flink 1.11.1 Released</a></dt>
<dd><p>The Apache Flink community released the first bugfix version of the Apache Flink 1.11 series.</p>
</dd>
<dt> <a href="/news/2020/07/14/application-mode.html">Application Deployment in Flink: Current State and the new Application Mode</a></dt>
<dd><p>With the rise of stream processing and real-time analytics as a critical tool for modern
businesses, an increasing number of organizations build platforms with Apache Flink at their
core and offer it internally as a service. Many talks with related topics from companies
like <a href="https://www.youtube.com/watch?v=VX3S9POGAdU">Uber</a>, <a href="https://www.youtube.com/watch?v=VX3S9POGAdU">Netflix</a>
and <a href="https://www.youtube.com/watch?v=cH9UdK0yYjc">Alibaba</a> in the latest editions of Flink Forward further
illustrate this trend.</p>
</dd>
<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>
</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>