You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by fh...@apache.org on 2018/09/18 20:30:26 UTC

[flink-web] branch asf-site updated: [hotfix] Remove outdated introduction.html and redirect to index.html

This is an automated email from the ASF dual-hosted git repository.

fhueske pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/flink-web.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new bd562a2  [hotfix] Remove outdated introduction.html and redirect to index.html
bd562a2 is described below

commit bd562a20d5776eed1ffa7f4bafd8413666780519
Author: Fabian Hueske <fh...@apache.org>
AuthorDate: Tue Sep 18 22:29:59 2018 +0200

    [hotfix] Remove outdated introduction.html and redirect to index.html
---
 .htaccess                 |   3 +
 content/.htaccess         |   3 +
 content/introduction.html | 340 ----------------------------------------------
 introduction.md           | 125 -----------------
 4 files changed, 6 insertions(+), 465 deletions(-)

diff --git a/.htaccess b/.htaccess
index d377174..892547a 100644
--- a/.htaccess
+++ b/.htaccess
@@ -4,6 +4,9 @@ RewriteEngine On
 RewriteCond %{HTTPS} off
 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
 
+# redirect introduction page to index
+Redirect /introduction.html https://flink.apache.org/index.html [L,R=301]
+
 RewriteRule ^/?docs/0.6-incubating/(.*) https://ci.apache.org/projects/flink/flink-docs-release-0.6/$1  [R=301,L,NE]
 RewriteRule ^/?docs/0.7-incubating/(.*) https://ci.apache.org/projects/flink/flink-docs-release-0.7/$1  [R=301,L,NE]
 RewriteRule ^/?docs/0.8/(.*) https://ci.apache.org/projects/flink/flink-docs-release-0.8/$1  [R=301,L,NE]
diff --git a/content/.htaccess b/content/.htaccess
index d377174..892547a 100644
--- a/content/.htaccess
+++ b/content/.htaccess
@@ -4,6 +4,9 @@ RewriteEngine On
 RewriteCond %{HTTPS} off
 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
 
+# redirect introduction page to index
+Redirect /introduction.html https://flink.apache.org/index.html [L,R=301]
+
 RewriteRule ^/?docs/0.6-incubating/(.*) https://ci.apache.org/projects/flink/flink-docs-release-0.6/$1  [R=301,L,NE]
 RewriteRule ^/?docs/0.7-incubating/(.*) https://ci.apache.org/projects/flink/flink-docs-release-0.7/$1  [R=301,L,NE]
 RewriteRule ^/?docs/0.8/(.*) https://ci.apache.org/projects/flink/flink-docs-release-0.8/$1  [R=301,L,NE]
diff --git a/content/introduction.html b/content/introduction.html
deleted file mode 100644
index 08268b2..0000000
--- a/content/introduction.html
+++ /dev/null
@@ -1,340 +0,0 @@
-<!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: Introduction to 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.3.4/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>
-
-            <!-- Use cases -->
-            <li><a href="/usecases.html">Use Cases</a></li>
-
-            <!-- Powered by -->
-            <li><a href="/poweredby.html">Powered By</a></li>
-
-            <!-- FAQ -->
-            <li><a href="/faq.html">FAQ</a></li>
-
-            &nbsp;
-            <!-- Second menu section aims to support Flink users -->
-
-            <!-- Downloads -->
-            <li><a href="/downloads.html">Downloads</a></li>
-
-            <!-- Quickstart -->
-            <li>
-              <a href="https://ci.apache.org/projects/flink/flink-docs-release-1.6/quickstart/setup_quickstart.html" target="_blank">Tutorials <small><span class="glyphicon glyphicon-new-window"></span></small></a>
-            </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.6" target="_blank">1.6 (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">1.7 (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>
-
-            &nbsp;
-
-            <!-- Third menu section aim to support community and contributors -->
-
-            <!-- Community -->
-            <li><a href="/community.html">Community &amp; Project Info</a></li>
-
-            <!-- Contribute -->
-            <li><a href="/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>
-
-          </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>
-
-          </ul>
-        </div><!-- /.navbar-collapse -->
-    </nav>
-
-      </div>
-      <div class="col-sm-9">
-      <div class="row-fluid">
-  <div class="col-sm-12">
-    <h1>Introduction to Apache Flink®</h1>
-
-	<p><br />
-Below is a high-level overview of Apache Flink and stream processing. For a more technical introduction, we recommend the <a href="https://ci.apache.org/projects/flink/flink-docs-release-1.6/concepts/programming-model.html" target="_blank">“Concepts” page</a> in the Flink documentation.
-<br /></p>
-<div class="page-toc">
-<ul id="markdown-toc">
-  <li><a href="#continuous-processing-for-unbounded-datasets" id="markdown-toc-continuous-processing-for-unbounded-datasets">Continuous Processing for Unbounded Datasets</a></li>
-  <li><a href="#features-why-flink" id="markdown-toc-features-why-flink">Features: Why Flink?</a></li>
-  <li><a href="#flink-the-streaming-model-and-bounded-datasets" id="markdown-toc-flink-the-streaming-model-and-bounded-datasets">Flink, the streaming model, and bounded datasets</a></li>
-  <li><a href="#the-what-flink-from-the-bottom-up" id="markdown-toc-the-what-flink-from-the-bottom-up">The “What”: Flink from the bottom-up</a>    <ul>
-      <li><a href="#deployment-modes" id="markdown-toc-deployment-modes">Deployment modes</a></li>
-      <li><a href="#runtime" id="markdown-toc-runtime">Runtime</a></li>
-      <li><a href="#apis" id="markdown-toc-apis">APIs</a></li>
-      <li><a href="#libraries" id="markdown-toc-libraries">Libraries</a></li>
-    </ul>
-  </li>
-  <li><a href="#flink-and-other-frameworks" id="markdown-toc-flink-and-other-frameworks">Flink and other frameworks</a></li>
-  <li><a href="#key-takeaways-and-next-steps" id="markdown-toc-key-takeaways-and-next-steps">Key Takeaways and Next Steps</a></li>
-</ul>
-
-</div>
-
-<h2 id="continuous-processing-for-unbounded-datasets">Continuous Processing for Unbounded Datasets</h2>
-<p>Before we go into detail about Flink, let’s review at a higher level the <em>types of datasets</em> you’re likely to encounter when processing data as well as <em>types of execution models</em> you can choose for processing. These two ideas are often conflated, and it’s useful to clearly separate them.</p>
-
-<p><strong>First, 2 types of datasets</strong></p>
-
-<ul>
-  <li>Unbounded: Infinite datasets that are appended to continuously</li>
-  <li>Bounded: Finite, unchanging datasets</li>
-</ul>
-
-<p>Many real-world data sets that are traditionally thought of as bounded or “batch” data are in reality unbounded datasets. This is true whether the data is stored in a sequence of directories on HDFS or in a log-based system like Apache Kafka.</p>
-
-<p>Examples of unbounded datasets include but are not limited to:</p>
-
-<ul>
-  <li>End users interacting with mobile or web applications</li>
-  <li>Physical sensors providing measurements</li>
-  <li>Financial markets</li>
-  <li>Machine log data</li>
-</ul>
-
-<p><strong>Second, 2 types of execution models</strong></p>
-
-<ul>
-  <li>Streaming: Processing that executes continuously as long as data is being produced</li>
-  <li>Batch: Processing that is executed and runs to completeness in a finite amount of time, releasing computing resources when finished</li>
-</ul>
-
-<p>It’s possible, though not necessarily optimal, to process either type of dataset with either type of execution model. For instance, batch execution has long been applied to unbounded datasets despite potential problems with windowing, state management, and out-of-order data.</p>
-
-<p>Flink relies on a <em>streaming execution model</em>, which is an intuitive fit for processing unbounded datasets: streaming execution is continuous processing on data that is continuously produced. And alignment between the type of dataset and the type of execution model offers many advantages with regard to accuracy and performance.</p>
-
-<h2 id="features-why-flink">Features: Why Flink?</h2>
-
-<p>Flink is an open-source framework for distributed stream processing that:</p>
-
-<ul>
-  <li>Provides results that are <strong>accurate</strong>, even in the case of out-of-order or late-arriving data</li>
-  <li>Is <strong>stateful and fault-tolerant</strong> and can seamlessly recover from failures while maintaining exactly-once application state</li>
-  <li>Performs at <strong>large scale</strong>, running on thousands of nodes with very good throughput and latency characteristics</li>
-</ul>
-
-<p>Earlier, we discussed aligning the type of dataset (bounded vs. unbounded) with the type of execution model (batch vs. streaming). Many of the Flink features listed below–state management, handling of out-of-order data, flexible windowing–are essential for computing accurate results on unbounded datasets and are enabled by Flink’s streaming execution model.</p>
-
-<ul>
-  <li>Flink guarantees <strong>exactly-once semantics for stateful computations</strong>. ‘Stateful’ means that applications can maintain an aggregation or summary of data that has been processed over time, and Flink’s checkpointing mechanism ensures exactly-once semantics for an application’s state in the event of a failure.</li>
-</ul>
-
-<p><img class="illu" src="/img/exactly_once_state.png" alt="Exactly Once State" width="389px" height="193px" /></p>
-
-<ul>
-  <li>Flink supports stream processing and windowing with <strong>event time semantics</strong>. Event time makes it easy to compute accurate results over streams where events arrive out of order and where events may arrive delayed.</li>
-</ul>
-
-<p><img class="illu" src="/img/out_of_order_stream.png" alt="Out Of Order Stream" width="520px" height="130px" /></p>
-
-<ul>
-  <li>Flink supports <strong>flexible windowing</strong> based on time, count, or sessions in addition to data-driven windows. Windows can be customized with flexible triggering conditions to support sophisticated streaming patterns. Flink’s windowing makes it possible to model the reality of the environment in which data is created.</li>
-</ul>
-
-<p><img class="illu" src="/img/windows.png" alt="Windows" width="520px" height="134px" /></p>
-
-<ul>
-  <li>Flink’s <strong>fault tolerance is lightweight</strong> and allows the system to maintain high throughput rates and provide exactly-once consistency guarantees at the same time. Flink recovers from failures with zero data loss while the tradeoff between reliability and latency is negligible.</li>
-</ul>
-
-<p><img class="illu" src="/img/distributed_snapshots.png" alt="Snapshots" width="260px" height="306px" /></p>
-
-<ul>
-  <li>Flink is capable of <strong>high throughput and low latency</strong> (processing lots of data quickly). The charts below show the performance of Apache Flink and Apache Storm completing a distributed item counting task that requires streaming data shuffles.</li>
-</ul>
-
-<p><img class="illu" src="/img/streaming_performance.png" alt="Performance" width="650px" height="232px" /></p>
-
-<ul>
-  <li>Flink’s <strong>savepoints provide a state versioning mechanism</strong>, making it possible to update applications or reprocess historic data with no lost state and minimal downtime.</li>
-</ul>
-
-<p><img class="illu" src="/img/savepoints.png" alt="Savepoints" width="450px" height="300px" /></p>
-
-<ul>
-  <li>Flink is designed to run on <strong>large-scale clusters</strong> with many thousands of nodes, and in addition to a standalone cluster mode, Flink provides support for YARN and Mesos.</li>
-</ul>
-
-<p><img class="illu" src="/img/parallel_dataflows.png" alt="Parallel" width="695px" height="459px" /></p>
-
-<h2 id="flink-the-streaming-model-and-bounded-datasets">Flink, the streaming model, and bounded datasets</h2>
-
-<p>If you’ve reviewed Flink’s documentation, you might have noticed both a DataStream API for working with unbounded data as well as a DataSet API for working with bounded data.</p>
-
-<p>Earlier in this write-up, we introduced the streaming execution model (“processing that executes continuously, an event-at-a-time”) as an intuitive fit for unbounded datasets. So how do bounded datasets relate to the stream processing paradigm?</p>
-
-<p>In Flink’s case, the relationship is quite natural. A bounded dataset can simply be treated as a special case of an unbounded one, so it’s possible to apply all of the same streaming concepts that we’ve laid out above to finite data.</p>
-
-<p>This is exactly how Flink’s DataSet API behaves. A bounded dataset is handled inside of Flink as a “finite stream”, with only a few minor differences in how Flink manages bounded vs. unbounded datasets.</p>
-
-<p>And so it’s possible to use Flink to process both bounded and unbounded data, with both APIs running on the same distributed streaming execution engine–a simple yet powerful architecture.</p>
-
-<h2 id="the-what-flink-from-the-bottom-up">The “What”: Flink from the bottom-up</h2>
-
-<p><img class="illu" src="/img/flink-stack-frontpage.png" alt="Source" width="596px" height="110px" /></p>
-
-<h3 id="deployment-modes">Deployment modes</h3>
-<p>Flink can run in the cloud or on premise and on a standalone cluster or on a cluster managed by YARN or Mesos.</p>
-
-<h3 id="runtime">Runtime</h3>
-<p>Flink’s core is a distributed streaming dataflow engine, meaning that data is processed an event-at-a-time rather than as a series of batches–an important distinction, as this is what enables many of Flink’s resilience and performance features that are detailed above.</p>
-
-<h3 id="apis">APIs</h3>
-
-<ul>
-  <li>Flink’s <a href="https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/datastream_api.html" target="_blank">DataStream API</a> is for programs that implement transformations on data streams (e.g., filtering, updating state, defining windows, aggregating).</li>
-  <li>The <a href="https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/batch/index.html" target="_blank">DataSet API</a> is for programs that implement transformations on data sets (e.g., filtering, mapping, joining, grouping).</li>
-  <li>The <a href="https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/table_api.html#table-api" target="_blank">Table API</a> is a SQL-like expression language for relational stream and batch processing that can be easily embedded in Flink’s DataSet and DataStream APIs (Java and Scala).</li>
-  <li><a href="https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/table_api.html#sql" target="_blank">Streaming SQL</a> enables SQL queries to be executed on streaming and batch tables. The syntax is based on <a href="https://calcite.apache.org/docs/stream.html" target="_blank">Apache Calcite™</a>.</li>
-</ul>
-
-<h3 id="libraries">Libraries</h3>
-<p>Flink also includes special-purpose libraries for <a href="https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/libs/cep.html" target="_blank">complex event processing</a>, <a href="https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/libs/ml/index.html" target="_blank">machine learning</a>, <a href="https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/libs/gelly/index.html" target="_blank">graph processing</a>, and <a href="https://ci.apache.org/proje [...]
-
-<h2 id="flink-and-other-frameworks">Flink and other frameworks</h2>
-
-<p>At the most basic level, a Flink program is made up of:</p>
-
-<ul>
-  <li><strong>Data source:</strong> Incoming data that Flink processes</li>
-  <li><strong>Transformations:</strong> The processing step, when Flink modifies incoming data</li>
-  <li><strong>Data sink:</strong> Where Flink sends data after processing</li>
-</ul>
-
-<p><img class="illu" src="/img/source-transform-sink-update.png" alt="Source" width="1000px" height="232px" /></p>
-
-<p>A well-developed ecosystem is necessary for the efficient movement of data in and out of a Flink program, and Flink supports a wide range of connectors to third-party systems for data sources and sinks.</p>
-
-<p>If you’re interested in learning more, we’ve collected <a href="/ecosystem.html">information about the Flink ecosystem here</a>.</p>
-
-<h2 id="key-takeaways-and-next-steps">Key Takeaways and Next Steps</h2>
-
-<p>In summary, Apache Flink is an open-source stream processing framework that eliminates the “performance vs. reliability” tradeoff often associated with open-source streaming engines and performs consistently in both categories. Following this introduction, we recommend you try our <a href="https://ci.apache.org/projects/flink/flink-docs-release-1.6/quickstart/setup_quickstart.html" target="_blank">quickstart</a>, <a href="/downloads.html">download</a> the most recent stable version of [...]
-
-<p>And we encourage you to join the Flink <a href="/community.html#mailing-lists">user mailing list</a> and to share your questions with the community. We’re here to help you get the most out of Flink.</p>
-
-
-  </div>
-</div>
-
-      </div>
-    </div>
-
-    <hr />
-
-    <div class="row">
-      <div class="footer text-center col-sm-12">
-        <p>Copyright © 2014-2017 <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="/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>
diff --git a/introduction.md b/introduction.md
deleted file mode 100644
index 7e2b6b3..0000000
--- a/introduction.md
+++ /dev/null
@@ -1,125 +0,0 @@
----
-title: "Introduction to Apache Flink®"
----
-<br>
-Below is a high-level overview of Apache Flink and stream processing. For a more technical introduction, we recommend the <a href="{{site.docs-stable}}/concepts/programming-model.html" target="_blank">"Concepts" page</a> in the Flink documentation.
-<br>
-{% toc %}
-
-## Continuous Processing for Unbounded Datasets
-Before we go into detail about Flink, let’s review at a higher level the _types of datasets_ you’re likely to encounter when processing data as well as _types of execution models_ you can choose for processing. These two ideas are often conflated, and it’s useful to clearly separate them.
-
-**First, 2 types of datasets**
-
-+ Unbounded: Infinite datasets that are appended to continuously
-+ Bounded: Finite, unchanging datasets
-
-Many real-world data sets that are traditionally thought of as bounded or “batch” data are in reality unbounded datasets. This is true whether the data is stored in a sequence of directories on HDFS or in a log-based system like Apache Kafka.
-
-Examples of unbounded datasets include but are not limited to:
-
-+ End users interacting with mobile or web applications
-+ Physical sensors providing measurements
-+ Financial markets
-+ Machine log data
-
-**Second, 2 types of execution models**
-
-+ Streaming: Processing that executes continuously as long as data is being produced
-+ Batch: Processing that is executed and runs to completeness in a finite amount of time, releasing computing resources when finished
-
-It’s possible, though not necessarily optimal, to process either type of dataset with either type of execution model. For instance, batch execution has long been applied to unbounded datasets despite potential problems with windowing, state management, and out-of-order data.
-
-Flink relies on a _streaming execution model_, which is an intuitive fit for processing unbounded datasets: streaming execution is continuous processing on data that is continuously produced. And alignment between the type of dataset and the type of execution model offers many advantages with regard to accuracy and performance.
-
-
-## Features: Why Flink?
-
-Flink is an open-source framework for distributed stream processing that:
-
-+ Provides results that are **accurate**, even in the case of out-of-order or late-arriving data
-+ Is **stateful and fault-tolerant** and can seamlessly recover from failures while maintaining exactly-once application state
-+ Performs at **large scale**, running on thousands of nodes with very good throughput and latency characteristics
-
-Earlier, we discussed aligning the type of dataset (bounded vs. unbounded) with the type of execution model (batch vs. streaming). Many of the Flink features listed below--state management, handling of out-of-order data, flexible windowing--are essential for computing accurate results on unbounded datasets and are enabled by Flink's streaming execution model.
-
-+ Flink guarantees **exactly-once semantics for stateful computations**. ‘Stateful’ means that applications can maintain an aggregation or summary of data that has been processed over time, and Flink's checkpointing mechanism ensures exactly-once semantics for an application’s state in the event of a failure.
-
-<img class="illu" src="{{ site.baseurl }}/img/exactly_once_state.png" alt="Exactly Once State" width="389px" height="193px"/>
-
-+ Flink supports stream processing and windowing with **event time semantics**. Event time makes it easy to compute accurate results over streams where events arrive out of order and where events may arrive delayed.
-
-<img class="illu" src="{{ site.baseurl }}/img/out_of_order_stream.png" alt="Out Of Order Stream" width="520px" height="130px"/>
-
-+ Flink supports **flexible windowing** based on time, count, or sessions in addition to data-driven windows. Windows can be customized with flexible triggering conditions to support sophisticated streaming patterns. Flink’s windowing makes it possible to model the reality of the environment in which data is created.
-
-<img class="illu" src="{{ site.baseurl }}/img/windows.png" alt="Windows" width="520px" height="134px"/>
-
-+ Flink’s **fault tolerance is lightweight** and allows the system to maintain high throughput rates and provide exactly-once consistency guarantees at the same time. Flink recovers from failures with zero data loss while the tradeoff between reliability and latency is negligible.
-
-<img class="illu" src="{{ site.baseurl }}/img/distributed_snapshots.png" alt="Snapshots" width="260px" height="306px"/>
-
-+ Flink is capable of **high throughput and low latency** (processing lots of data quickly). The charts below show the performance of Apache Flink and Apache Storm completing a distributed item counting task that requires streaming data shuffles.
-
-<img class="illu" src="{{ site.baseurl }}/img/streaming_performance.png" alt="Performance" width="650px" height="232px"/>
-
-+ Flink's **savepoints provide a state versioning mechanism**, making it possible to update applications or reprocess historic data with no lost state and minimal downtime.
-
-<img class="illu" src="{{ site.baseurl }}/img/savepoints.png" alt="Savepoints" width="450px" height="300px"/>
-
-+ Flink is designed to run on **large-scale clusters** with many thousands of nodes, and in addition to a standalone cluster mode, Flink provides support for YARN and Mesos.
-
-<img class="illu" src="{{ site.baseurl }}/img/parallel_dataflows.png" alt="Parallel" width="695px" height="459px"/>
-
-## Flink, the streaming model, and bounded datasets
-
-If you’ve reviewed Flink’s documentation, you might have noticed both a DataStream API for working with unbounded data as well as a DataSet API for working with bounded data.
-
-Earlier in this write-up, we introduced the streaming execution model (“processing that executes continuously, an event-at-a-time”) as an intuitive fit for unbounded datasets. So how do bounded datasets relate to the stream processing paradigm?
-
-In Flink’s case, the relationship is quite natural. A bounded dataset can simply be treated as a special case of an unbounded one, so it’s possible to apply all of the same streaming concepts that we’ve laid out above to finite data.
-
-This is exactly how Flink's DataSet API behaves. A bounded dataset is handled inside of Flink as a “finite stream”, with only a few minor differences in how Flink manages bounded vs. unbounded datasets.
-
-And so it’s possible to use Flink to process both bounded and unbounded data, with both APIs running on the same distributed streaming execution engine--a simple yet powerful architecture.
-
-
-## The “What”: Flink from the bottom-up
-
-<img class="illu" src="{{ site.baseurl }}/img/flink-stack-frontpage.png" alt="Source" width="596px" height="110px"/>
-
-### Deployment modes
-Flink can run in the cloud or on premise and on a standalone cluster or on a cluster managed by YARN or Mesos.
-
-### Runtime
-Flink’s core is a distributed streaming dataflow engine, meaning that data is processed an event-at-a-time rather than as a series of batches--an important distinction, as this is what enables many of Flink’s resilience and performance features that are detailed above.
-
-### APIs
-
-+ Flink’s <a href="{{site.docs-stable}}/dev/datastream_api.html" target="_blank">DataStream API</a> is for programs that implement transformations on data streams (e.g., filtering, updating state, defining windows, aggregating).
-+ The <a href="{{site.docs-stable}}/dev/batch/index.html" target="_blank">DataSet API</a> is for programs that implement transformations on data sets (e.g., filtering, mapping, joining, grouping).
-+ The <a href="{{site.docs-stable}}/dev/table_api.html#table-api" target="_blank">Table API</a> is a SQL-like expression language for relational stream and batch processing that can be easily embedded in Flink’s DataSet and DataStream APIs (Java and Scala).
-+ <a href="{{site.docs-stable}}/dev/table_api.html#sql" target="_blank">Streaming SQL</a> enables SQL queries to be executed on streaming and batch tables. The syntax is based on <a href="https://calcite.apache.org/docs/stream.html" target="_blank">Apache Calcite™</a>.
-
-### Libraries
-Flink also includes special-purpose libraries for <a href="{{site.docs-stable}}/dev/libs/cep.html" target="_blank">complex event processing</a>, <a href="{{site.docs-stable}}/dev/libs/ml/index.html" target="_blank">machine learning</a>, <a href="{{site.docs-stable}}/dev/libs/gelly/index.html" target="_blank">graph processing</a>, and <a href="{{site.docs-stable}}/dev/libs/storm_compatibility.html" target="_blank">Apache Storm compatibility</a>.
-
-## Flink and other frameworks
-
-At the most basic level, a Flink program is made up of:
-
-+ **Data source:** Incoming data that Flink processes
-+ **Transformations:** The processing step, when Flink modifies incoming data
-+ **Data sink:** Where Flink sends data after processing
-
-<img class="illu" src="{{ site.baseurl }}/img/source-transform-sink-update.png" alt="Source" width="1000px" height="232px"/>
-
-A well-developed ecosystem is necessary for the efficient movement of data in and out of a Flink program, and Flink supports a wide range of connectors to third-party systems for data sources and sinks.
-
-If you’re interested in learning more, we’ve collected [information about the Flink ecosystem here]({{ site.baseurl }}/ecosystem.html).
-
-## Key Takeaways and Next Steps
-
-In summary, Apache Flink is an open-source stream processing framework that eliminates the "performance vs. reliability" tradeoff often associated with open-source streaming engines and performs consistently in both categories. Following this introduction, we recommend you try our <a href="{{site.docs-stable}}/quickstart/setup_quickstart.html" target="_blank">quickstart</a>, [download]({{ site.baseurl }}/downloads.html) the most recent stable version of Flink, or review the <a href="{{si [...]
-
-And we encourage you to join the Flink [user mailing list]( {{ site.base }}/community.html#mailing-lists ) and to share your questions with the community. We’re here to help you get the most out of Flink.