| <!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> |
| |
| |
| |
| <!-- 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> |
| |
| |
| <!-- Third menu section aim to support community and contributors --> |
| |
| <!-- Community --> |
| <li><a href="/zh/community.html">社区 & 项目信息</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> |
| |
| |
| |
| <!-- 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>数据管道 & 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 & Batch Data</li> |
| <li>DataStream API & DataSet API</li> |
| <li>ProcessFunction (Time & 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/30/demo-fraud-detection-3.html">Advanced Flink Application Patterns Vol.3: Custom Window Processing</a></dt> |
| <dd>In this series of blog posts you will learn about powerful Flink patterns for building streaming applications.</dd> |
| |
| <dt> <a href="/2020/07/28/flink-sql-demo-building-e2e-streaming-application.html">Flink SQL Demo: Building an End-to-End Streaming Application</a></dt> |
| <dd>Apache Flink 1.11 has released many exciting new features, including many developments in Flink SQL which is evolving at a fast pace. This article takes a closer look at how to quickly build streaming applications with Flink SQL from a practical point of view.</dd> |
| |
| <dt> <a href="/news/2020/07/27/community-update.html">Flink Community Update - July'20</a></dt> |
| <dd>As July draws to an end, we look back at a monthful of activity in the Flink community, including two releases (!) and some work around improving the first-time contribution experience in the project. Also, events are starting to pick up again, so we've put together a list of some great events you can (virtually) attend in August!</dd> |
| |
| <dt> <a href="/2020/07/23/catalogs.html">Sharing is caring - Catalogs in Flink SQL</a></dt> |
| <dd><p>With an ever-growing number of people working with data, it’s a common practice for companies to build self-service platforms with the goal of democratizing their access across different teams and — especially — to enable users from any background to be independent in their data needs. In such environments, metadata management becomes a crucial aspect. Without it, users often work blindly, spending too much time searching for datasets and their location, figuring out data formats and similar cumbersome tasks.</p> |
| |
| </dd> |
| |
| <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> |
| |
| </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> · <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> |