| <!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: Features</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" /> |
| |
| <!-- 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> |
| |
| |
| <!-- Top navbar. --> |
| <nav class="navbar navbar-default navbar-fixed-top"> |
| <div class="container"> |
| <!-- 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/navbar-brand-logo.jpg" width="78px" height="40px"></a> |
| </div> |
| </div><!-- /.navbar-header --> |
| |
| <!-- The navigation links. --> |
| <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> |
| <ul class="nav navbar-nav"> |
| <!-- Overview --> |
| <li><a href="/index.html">Overview</a></li> |
| |
| <!-- Quickstart --> |
| <li class="dropdown"> |
| <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Quickstart <span class="caret"></span></a> |
| <ul class="dropdown-menu" role="menu"> |
| <li><a href="http://ci.apache.org/projects/flink/flink-docs-release-0.9/quickstart/setup_quickstart.html">Setup</a></li> |
| <li><a href="http://ci.apache.org/projects/flink/flink-docs-release-0.9/quickstart/java_api_quickstart.html">Java API</a></li> |
| <li><a href="http://ci.apache.org/projects/flink/flink-docs-release-0.9/quickstart/scala_api_quickstart.html">Scala API</a></li> |
| <li><a href="http://ci.apache.org/projects/flink/flink-docs-release-0.9/quickstart/run_example_quickstart.html">Run Step-by-Step Example</a></li> |
| </ul> |
| </li> |
| |
| <!-- Features --> |
| <li class="active"><a href="/features.html">Features</a></li> |
| |
| <!-- Downloads --> |
| <li><a href="/downloads.html">Downloads</a></li> |
| |
| <!-- Documentation --> |
| <li class="dropdown"> |
| <a href="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Documentation <span class="caret"></span></a> |
| <ul class="dropdown-menu" role="menu"> |
| <!-- Latest stable release --> |
| <li role="presentation" class="dropdown-header"><strong>Latest Release</strong> (Stable)</li> |
| <li><a href="http://ci.apache.org/projects/flink/flink-docs-release-0.9">0.9.0 Documentation</a></li> |
| <li><a href="http://ci.apache.org/projects/flink/flink-docs-release-0.9/api/java" class="active">0.9.0 Javadocs</a></li> |
| <li><a href="http://ci.apache.org/projects/flink/flink-docs-release-0.9/api/scala/index.html" class="active">0.9.0 ScalaDocs</a></li> |
| |
| <!-- Snapshot docs --> |
| <li class="divider"></li> |
| <li role="presentation" class="dropdown-header"><strong>Snapshot</strong> (Development)</li> |
| <li><a href="http://ci.apache.org/projects/flink/flink-docs-master">0.10 Documentation</a></li> |
| <li><a href="http://ci.apache.org/projects/flink/flink-docs-master/api/java" class="active">0.10 Javadocs</a></li> |
| <li><a href="http://ci.apache.org/projects/flink/flink-docs-master/api/scala/index.html" class="active">0.10 ScalaDocs</a></li> |
| |
| <!-- Wiki --> |
| <li class="divider"></li> |
| <li><a href="https://cwiki.apache.org/confluence/display/FLINK/Apache+Flink+Home"><small><span class="glyphicon glyphicon-new-window"></span></small> Wiki</a></li> |
| </ul> |
| </li> |
| |
| <!-- FAQ --> |
| <li><a href="/faq.html">FAQ</a></li> |
| </ul> |
| |
| <ul class="nav navbar-nav navbar-right"> |
| <!-- Blog --> |
| <li class=" hidden-md hidden-sm"><a href="/blog/">Blog</a></li> |
| |
| <li class="dropdown hidden-md hidden-sm"> |
| <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Community <span class="caret"></span></a> |
| <ul class="dropdown-menu" role="menu"> |
| <!-- Community --> |
| <li role="presentation" class="dropdown-header"><strong>Community</strong></li> |
| <li><a href="/community.html#mailing-lists">Mailing Lists</a></li> |
| <li><a href="/community.html#irc">IRC</a></li> |
| <li><a href="/community.html#stack-overflow">Stack Overflow</a></li> |
| <li><a href="/community.html#issue-tracker">Issue Tracker</a></li> |
| <li><a href="/community.html#source-code">Source Code</a></li> |
| <li><a href="/community.html#people">People</a></li> |
| |
| <!-- Contribute --> |
| <li class="divider"></li> |
| <li role="presentation" class="dropdown-header"><strong>Contribute</strong></li> |
| <li><a href="/how-to-contribute.html">How to Contribute</a></li> |
| <li><a href="/coding-guidelines.html">Coding Guidelines</a></li> |
| </ul> |
| </li> |
| |
| <li class="dropdown hidden-md hidden-sm"> |
| <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Project <span class="caret"></span></a> |
| <ul class="dropdown-menu" role="menu"> |
| <!-- Project --> |
| <li role="presentation" class="dropdown-header"><strong>Project</strong></li> |
| <li><a href="/material.html">Material</a></li> |
| <li><a href="https://twitter.com/apacheflink"><small><span class="glyphicon glyphicon-new-window"></span></small> Twitter</a></li> |
| <li><a href="https://github.com/apache/flink"><small><span class="glyphicon glyphicon-new-window"></span></small> GitHub</a></li> |
| <li><a href="https://cwiki.apache.org/confluence/display/FLINK/Apache+Flink+Home"><small><span class="glyphicon glyphicon-new-window"></span></small> Wiki</a></li> |
| </ul> |
| </li> |
| </ul> |
| </div><!-- /.navbar-collapse --> |
| </div><!-- /.container --> |
| </nav> |
| |
| |
| <!-- Main content. --> |
| <div class="container"> |
| |
| |
| <div class="row"> |
| <div class="col-sm-8 col-sm-offset-2"> |
| <div class="row"> |
| <div class="col-sm-12"><h1>Features</h1></div> |
| </div> |
| |
| <!-- System Overview --> |
| <div class="row" style="padding: 2em 0 0 0"> |
| <div class="col-sm-12"> |
| <h1>System Overview</h1> |
| <p class="lead">Flink contains APIs in Java and Scala for analyzing data from batch and streaming data sources, as well as its own optimizer and distributed runtime with custom memory management.</p> |
| </div> |
| </div> |
| <div class="row" style="padding: 0 0 2em 0"> |
| <div class="col-sm-12 text-center"> |
| <img src="/img/assets/WhatIsFlink.png" alt="Apache Flink is Fast" style="width:100%" /> |
| </div> |
| </div> |
| |
| <!-- Fast --> |
| <div class="row" style="padding: 2em 0 2em 0"> |
| <div class="col-sm-6"> |
| <h1 id="fast">Fast</h1> |
| <p class="lead">Flink exploits in-memory data streaming and integrates iterative processing deeply into the system runtime.</p> |
| <p class="lead">This makes the system extremely fast for data-intensive and iterative jobs.</p> |
| </div> |
| <div class="col-sm-6"> |
| <img src="/img/assets/pagerank.png" alt="Apache Flink is Fast" style="width:100%" /> |
| </div> |
| </div> |
| |
| <!-- Reliable and Scalable --> |
| <div class="row" style="padding: 2em 0 2em 0"> |
| <div class="col-sm-6 text-center"> |
| <img src="/img/assets/grep.png" alt="Apache Flink is Fast" style="width:100%" /> |
| </div> |
| <div class="col-sm-6"> |
| <h1 id="reliable-and-scalable">Reliable and Scalable</h1> |
| <p class="lead">Flink is designed to perform well when memory runs out.</p> |
| <p class="lead">Flink contains its own memory management component, serialization framework, and type inference engine.</p> |
| <p class="lead">Tested in clusters of 100s of nodes, Amazon EC2, and Google Compute Engine.</p> |
| </div> |
| </div> |
| |
| <!-- Expressive --> |
| <div class="row"> |
| <div class="col-sm-12"> |
| <h1 id="expressive">Expressive</h1> |
| <p class="lead">Write beautiful, type-safe, and maintainable code in Java or Scala. Execute it on a cluster. You can use native Java and Scala data types without packing them into key-value pairs, logical field addressing, and a wealth of operators.</p> |
| <h2>WordCount in Flink's Scala API</h2> |
| |
| <div class="highlight"><pre><code class="language-scala" data-lang="scala"><span class="k">case</span> <span class="k">class</span> <span class="nc">Word</span> <span class="o">(</span><span class="n">word</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">frequency</span><span class="k">:</span> <span class="kt">Int</span><span class="o">)</span> |
| |
| <span class="k">val</span> <span class="n">counts</span> <span class="k">=</span> <span class="n">text</span> |
| <span class="o">.</span><span class="n">flatMap</span> <span class="o">{</span><span class="n">line</span> <span class="k">=></span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="o">(</span><span class="s">" "</span><span class="o">).</span><span class="n">map</span><span class="o">(</span> |
| <span class="n">word</span> <span class="k">=></span> <span class="nc">Word</span><span class="o">(</span><span class="n">word</span><span class="o">,</span><span class="mi">1</span><span class="o">))}</span> |
| <span class="o">.</span><span class="n">groupBy</span><span class="o">(</span><span class="s">"word"</span><span class="o">).</span><span class="n">sum</span><span class="o">(</span><span class="s">"frequency"</span><span class="o">)</span></code></pre></div> |
| |
| <h2>Transitive Closure</h2> |
| |
| <div class="highlight"><pre><code class="language-scala" data-lang="scala"><span class="k">case</span> <span class="k">class</span> <span class="nc">Path</span> <span class="o">(</span><span class="n">from</span><span class="k">:</span> <span class="kt">Long</span><span class="o">,</span> <span class="n">to</span><span class="k">:</span> <span class="kt">Long</span><span class="o">)</span> |
| |
| <span class="k">val</span> <span class="n">tc</span> <span class="k">=</span> <span class="n">edges</span><span class="o">.</span><span class="n">iterate</span><span class="o">(</span><span class="mi">10</span><span class="o">)</span> <span class="o">{</span> <span class="n">paths</span><span class="k">:</span> <span class="kt">DataSet</span><span class="o">[</span><span class="kt">Path</span><span class="o">]</span> <span class="k">=></span> |
| <span class="k">val</span> <span class="n">next</span> <span class="k">=</span> <span class="n">paths</span> |
| <span class="o">.</span><span class="n">join</span><span class="o">(</span><span class="n">edges</span><span class="o">).</span><span class="n">where</span><span class="o">(</span><span class="s">"to"</span><span class="o">).</span><span class="n">equalTo</span><span class="o">(</span><span class="s">"from"</span><span class="o">)</span> <span class="o">{</span> |
| <span class="o">(</span><span class="n">path</span><span class="o">,</span> <span class="n">edge</span><span class="o">)</span> <span class="k">=></span> <span class="nc">Path</span><span class="o">(</span><span class="n">path</span><span class="o">.</span><span class="n">from</span><span class="o">,</span> <span class="n">edge</span><span class="o">.</span><span class="n">to</span><span class="o">)</span> |
| <span class="o">}</span> |
| <span class="o">.</span><span class="n">union</span><span class="o">(</span><span class="n">paths</span><span class="o">).</span><span class="n">distinct</span><span class="o">()</span> |
| <span class="n">next</span> |
| <span class="o">}</span></code></pre></div> |
| |
| </div> |
| </div> |
| |
| <!-- Easy to Use --> |
| <div class="row" style="padding: 2em 0 2em 0"> |
| <div class="col-sm-6"> |
| <h1 id="easy-to-use">Easy to Use</h1> |
| <p class="lead">Flink requires few configuration parameters. And the system's bult-in optimizer takes care of finding the best way to execute the program in any enviroment.</p> |
| <p class="lead">Run on YARN with 3 commands, in a stand-alone cluster, or locally in a debugger.</p> |
| </div> |
| <div class="col-sm-6 text-center"> |
| <img src="/img/assets/optimizer-visual.png" alt="Apache Flink is easy to use" style="width:100%" /> |
| </div> |
| </div> |
| |
| <!-- Compatible with Hadoop --> |
| <div class="row" style="padding: 2em 0 2em 0"> |
| <div class="col-sm-6 text-center"> |
| <img src="/img/assets/hadoop-img.png" alt="Apache Flink is compatible with Hadoop" style="width:100%" /> |
| </div> |
| <div class="col-sm-6"> |
| <h1 id="hadoop">Compatible with Hadoop</h1> |
| <p class="lead">Flink supports all Hadoop input and output formats and data types</p> |
| <p class="lead">You can run your legacy MapReduce operators unmodified and faster on Flink..</p> |
| <p class="lead">Flink can read data from HDFS and HBase, and runs on top of YARN.</p> |
| </div> |
| </div> |
| |
| |
| |
| </div> |
| </div> |
| |
| |
| <hr /> |
| <div class="footer text-center"> |
| <p>Copyright © 2014-2015 <a href="http://apache.org">The Apache Software Foundation</a>. All Rights Reserved.</p> |
| <p>Apache Flink, Apache, and the Apache feather logo are trademarks of The Apache Software Foundation.</p> |
| <p><a href="/privacy-policy.html">Privacy Policy</a> · <a href="/blog/feed.xml">RSS feed</a></p> |
| </div> |
| |
| </div><!-- /.container --> |
| |
| <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> |
| <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> |
| <!-- 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> |
| |
| <!-- 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> |