blob: 4d886f06e7a8b48635ad1ebc3311e6b6e772db47 [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 -->
<meta name="description" content="A new open source Apache Hadoop ecosystem project, Apache Kudu completes Hadoop's storage layer to enable fast analytics on fast data" />
<meta name="author" content="Cloudera" />
<title>Apache Kudu - Apache Kudu 1.16.0 Release Notes</title>
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7"
crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="/css/kudu.css" rel="stylesheet"/>
<link href="/css/asciidoc.css" rel="stylesheet"/>
<link rel="shortcut icon" href="/img/logo-favicon.ico" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" />
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[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>
<div class="kudu-site container-fluid">
<!-- Static navbar -->
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="logo" href="/"><img
src="//d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_80px.png"
srcset="//d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_80px.png 1x, //d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_160px.png 2x"
alt="Apache Kudu"/></a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li >
<a href="/">Home</a>
</li>
<li >
<a href="/overview.html">Overview</a>
</li>
<li class="active">
<a href="/docs/">Documentation</a>
</li>
<li >
<a href="/releases/">Releases</a>
</li>
<li >
<a href="/blog/">Blog</a>
</li>
<!-- NOTE: this dropdown menu does not appear on Mobile, so don't add anything here
that doesn't also appear elsewhere on the site. -->
<li class="dropdown">
<a href="/community.html" role="button" aria-haspopup="true" aria-expanded="false">Community <span class="caret"></span></a>
<ul class="dropdown-menu">
<li class="dropdown-header">GET IN TOUCH</li>
<li><a class="icon email" href="/community.html">Mailing Lists</a></li>
<li><a class="icon slack" href="https://getkudu-slack.herokuapp.com/">Slack Channel</a></li>
<li role="separator" class="divider"></li>
<li><a href="/community.html#meetups-user-groups-and-conference-presentations">Events and Meetups</a></li>
<li><a href="/committers.html">Project Committers</a></li>
<li><a href="/ecosystem.html">Ecosystem</a></li>
<!--<li><a href="/roadmap.html">Roadmap</a></li>-->
<li><a href="/community.html#contributions">How to Contribute</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">DEVELOPER RESOURCES</li>
<li><a class="icon github" href="https://github.com/apache/incubator-kudu">GitHub</a></li>
<li><a class="icon gerrit" href="http://gerrit.cloudera.org:8080/#/q/status:open+project:kudu">Gerrit Code Review</a></li>
<li><a class="icon jira" href="https://issues.apache.org/jira/browse/KUDU">JIRA Issue Tracker</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">SOCIAL MEDIA</li>
<li><a class="icon twitter" href="https://twitter.com/ApacheKudu">Twitter</a></li>
<li><a href="https://www.reddit.com/r/kudu/">Reddit</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">APACHE SOFTWARE FOUNDATION</li>
<li><a href="https://www.apache.org/security/" target="_blank">Security</a></li>
<li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship</a></li>
<li><a href="https://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a></li>
<li><a href="https://www.apache.org/licenses/" target="_blank">License</a></li>
</ul>
</li>
<li >
<a href="/faq.html">FAQ</a>
</li>
</ul><!-- /.nav -->
</div><!-- /#navbar -->
</div><!-- /.container-fluid -->
</nav>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<div class="container">
<div class="row">
<div class="col-md-9">
<h1>Apache Kudu 1.16.0 Release Notes</h1>
<div class="sect1">
<h2 id="rn_1.16.0_upgrade_notes"><a class="link" href="#rn_1.16.0_upgrade_notes">Upgrade Notes</a></h2>
<div class="sectionbody">
</div>
</div>
<div class="sect1">
<h2 id="rn_1.16.0_deprecations"><a class="link" href="#rn_1.16.0_deprecations">Deprecations</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Support for Python 2.x and Python 3.4 and earlier is deprecated and may be
removed in the next minor release.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.16.0_new_features"><a class="link" href="#rn_1.16.0_new_features">New features</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Clients can now require authentication and encryption instead of depending on
server-side settings
(<a href="https://issues.apache.org/jira/browse/KUDU-1921">KUDU-1921</a>).</p>
</li>
<li>
<p>Kudu Masters now automatically attempt to add themselves to an existing
cluster if there is a healthy Raft quorum among Kudu Masters.</p>
</li>
<li>
<p>A new tool <code>kudu master unsafe_rebuild</code> is added to reconstruct the master
catalog from tablet metadata collected from tablet servers. This can be used
in emergencies to restore access to tables when all masters are unavailable.</p>
</li>
<li>
<p>A new tool <code>kudu table set_replication_factor</code> is added to alter the
replication factor of a table. The tool immediately updates table metadata in
the master, and the master will asynchronously effect the new replication
factor. Progress can be monitored by running <code>ksck</code>.</p>
</li>
<li>
<p>It’s now possible to require a minimum replication factor for a Kudu table.
This can be achieved by customizing the setting for the newly introduced
<code>--min_num_replicas</code> kudu-master’s flag. For example, setting
<code>--min_num_replicas=3</code> enforces every newly created table to have at least 3
replicas for each of its tablets, so there cannot be a data loss when just a
single tablet server in the cluster fails irrecoverably. For the sake of
backward compatibility, <code>--min_num_replicas</code> is set to 1 by default.</p>
</li>
<li>
<p>It’s now possible to track startup progress on the <code>/startup</code> page on the web
UI. There are also metrics added to track the overall server startup progress
as well as the processing of the log block containers and starting of the
tablets (<a href="https://issues.apache.org/jira/browse/KUDU-1959">KUDU-1959</a>).</p>
</li>
<li>
<p>A new tool <code>kudu table add_column</code> is added to add columns to existing tables
using the CLI
(<a href="https://issues.apache.org/jira/browse/KUDU-3339">KUDU-3339</a>).</p>
</li>
<li>
<p>A new tool <code>kudu tserver unregister</code> is added to remove a dead tablet server
from the cluster without restarting the masters
(<a href="https://issues.apache.org/jira/browse/KUDU-2915">KUDU-2915</a>).</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.16.0_improvements"><a class="link" href="#rn_1.16.0_improvements">Optimizations and improvements</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Kudu will now more aggressively fsync consensus-related metadata when metadata
is configured to be on an XFS mount. This may lead to increased contention on
the device that backs metadata, but will prevent corruption in the event of an
outage (<a href="https://issues.apache.org/jira/browse/KUDU-2195">KUDU-2195</a>).</p>
</li>
<li>
<p>A clearer message is logged when the Ranger subprocess crashes, to specify a
problem with the Ranger client.</p>
</li>
<li>
<p>Two new flags have been introduced for the <code>kudu table scan</code> and <code>kudu perf
table_scan</code> CLI tools: <code>--row_count_only</code> and <code>--report_scanner_stats</code>. With
these new flags, the above mentioned CLI tools allow to issue scan requests
equivalent to running “SELECT COUNT(1) FROM &lt;table_name&gt;” from impala-shell.
These new provisions are useful in detecting and troubleshooting scan
performance issues.</p>
</li>
<li>
<p>Added replica selection configuration knob for the <code>kudu table scan</code> and <code>kudu
perf table_scan</code> CLI tools: it’s controlled by the <code>--replica_selection</code> flag.</p>
</li>
<li>
<p>To improve security, the following flags are now marked as sensitive and will
be redacted in the logs and WebUI when the redaction is enabled:</p>
<div class="ulist">
<ul>
<li>
<p><code>--webserver_private_key_file</code></p>
</li>
<li>
<p><code>--webserver_private_key_password_cmd</code></p>
</li>
<li>
<p><code>--webserver_password_file</code></p>
</li>
</ul>
</div>
</li>
<li>
<p>The logic to select the effective time source when running with
<code>--time_source=auto</code> has been updated. The <code>builtin</code> time source would be
auto-selected if a Kudu server runs with <code>--time_source=auto</code> in an
environment where the instance detector isn&#8217;t aware of dedicated NTP servers
AND the <code>--builtin_ntp_servers</code> flag is set to a valid value. Otherwise, if
<code>--builtin_ntp_servers</code> flag is set to an empty or invalid value, the
effective time source becomes <code>system</code> for platforms supporting the
<code>get_ntptime()</code> API, otherwise the catch-all case selects the <code>system_unsync</code>
as the time effective source.</p>
</li>
<li>
<p>It is now possible to print or edit PBC files in batch using the <code>kudu pbc</code>
CLI tool, and also to format its JSON input/output as “pretty”.</p>
</li>
<li>
<p>Client connection timeout is now configurable in the Java client
(<a href="https://issues.apache.org/jira/browse/KUDU-3240">KUDU-3240</a>).</p>
</li>
<li>
<p>A new <code>/healthz</code> endpoint is now available on the kudu-master and tablet-server
embedded web servers for liveness checks
(<a href="https://issues.apache.org/jira/browse/KUDU-3308">KUDU-3308</a>).</p>
</li>
<li>
<p>Hive Metastore URI is now logged to the console when connecting via <code>kudu hms</code>
CLI tool (<a href="https://issues.apache.org/jira/browse/KUDU-3189">KUDU-3189</a>).</p>
</li>
<li>
<p>It is now possible to start up a master when there is an additional master
address present in the master addresses flag
(<a href="https://issues.apache.org/jira/browse/KUDU-3311">KUDU-3311</a>).</p>
</li>
<li>
<p>Table entity is now accessible in <code>KuduWriteOperation</code> in the C++ client,
making understanding errors on the client side easier
(<a href="https://issues.apache.org/jira/browse/KUDU-2623">KUDU-2623</a>).</p>
</li>
<li>
<p>The rebalancer tool now doesn’t move replicas to tablet servers in maintenance
mode (<a href="https://issues.apache.org/jira/browse/KUDU-3328">KUDU-3328</a>).</p>
</li>
<li>
<p>Improved the performance of the run length encoding (RLE).</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.16.0_fixed_issues"><a class="link" href="#rn_1.16.0_fixed_issues">Fixed Issues</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Log4J used in Ranger subprocess was upgraded to 2.17.1 which contains patches
go several security vulnerabilities
(<a href="https://nvd.nist.gov/vuln/detail/CVE-2021-44832">CVE-2021-44832</a>,
<a href="https://nvd.nist.gov/vuln/detail/CVE-2021-45105">CVE-2021-45105</a>,
<a href="https://nvd.nist.gov/vuln/detail/CVE-2021-45046">CVE-2021-45046</a>, and
<a href="https://nvd.nist.gov/vuln/detail/CVE-2021-44228">CVE-2021-44228</a>).</p>
</li>
<li>
<p>Kudu servers previously crashed if hostnames became unresolvable via DNS (e.g.
if the container hosting a server were destroyed). Such errors are now treated
as transient and the lookups are retried periodically. See
<a href="https://issues.apache.org/jira/browse/KUDU-75">KUDU-75</a>,
<a href="https://issues.apache.org/jira/browse/KUDU-1620">KUDU-1620</a>,
and <a href="https://issues.apache.org/jira/browse/KUDU-1885">KUDU-1885</a> for more details.</p>
</li>
<li>
<p>Fixed an issue in Kudu Java client where concurrent flushing of data buffers
could lead to errors reported as 'java.lang.AssertionError: This Deferred was
already called'
(<a href="https://issues.apache.org/jira/browse/KUDU-3277">KUDU-3277</a>).</p>
</li>
<li>
<p>Fixed Kudu RPC negotiation issue when running with cyrus-sasl-gssapi-2.1.27-5
and newer versions of the RPM package. A failed RPC connection negotiation
attempt would result in an error logged along with the full connection
negotiation trace: <code>Runtime error: SASL(-15): mechanism too weak for this
user: Unable to find a callback: 32775</code>
(<a href="https://issues.apache.org/jira/browse/KUDU-3297">KUDU-3297</a>).</p>
</li>
<li>
<p>Fixed crash in kudu-master and kudu-tserver when running with kernel where the
<code>getrandom(2)</code> API is not available (versions of Linux kernel prior to 3.17).</p>
</li>
<li>
<p>Fixed bug which could lead to exhaustion of the address space for the outgoing
connections on a busy Kudu cluster
(<a href="https://issues.apache.org/jira/browse/KUDU-3352">KUDU-3352</a>).</p>
</li>
<li>
<p>Fixed a bug in the Java client where a malformed tablet server ID in the scan
token causes connection failures and timeouts in some cases
(<a href="https://issues.apache.org/jira/browse/KUDU-3349">KUDU-3349</a>).</p>
</li>
<li>
<p>Fixed a bug where the rebalancer failed with <code>-ignored_tservers</code> flag
(<a href="https://issues.apache.org/jira/browse/KUDU-3346">KUDU-3346</a>).</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.16.0_wire_compatibility"><a class="link" href="#rn_1.16.0_wire_compatibility">Wire Protocol compatibility</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Kudu 1.16.0 is wire-compatible with previous versions of Kudu:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Kudu 1.16 clients may connect to servers running Kudu 1.0 or later. If the client uses
features that are not available on the target server, an error will be returned.</p>
</li>
<li>
<p>Rolling upgrade between Kudu 1.15 and Kudu 1.16 servers is believed to be possible
though has not been sufficiently tested. Users are encouraged to shut down all nodes
in the cluster, upgrade the software, and then restart the daemons on the new version.</p>
</li>
<li>
<p>Kudu 1.0 clients may connect to servers running Kudu 1.16 with the exception of the
below-mentioned restrictions regarding secure clusters.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The authentication features introduced in Kudu 1.3 place the following limitations
on wire compatibility between Kudu 1.16 and versions earlier than 1.3:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>If a Kudu 1.16 cluster is configured with authentication or encryption set to "required",
clients older than Kudu 1.3 will be unable to connect.</p>
</li>
<li>
<p>If a Kudu 1.16 cluster is configured with authentication and encryption set to "optional"
or "disabled", older clients will still be able to connect.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.16.0_incompatible_changes"><a class="link" href="#rn_1.16.0_incompatible_changes">Incompatible Changes in Kudu 1.16.0</a></h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="rn_1.16.0_client_compatibility"><a class="link" href="#rn_1.16.0_client_compatibility">Client Library Compatibility</a></h3>
<div class="ulist">
<ul>
<li>
<p>The Kudu 1.16 Java client library is API- and ABI-compatible with Kudu 1.15. Applications
written against Kudu 1.15 will compile and run against the Kudu 1.16 client library and
vice-versa.</p>
</li>
<li>
<p>The Kudu 1.16 C&#43;&#43; client is API- and ABI-forward-compatible with Kudu 1.15.
Applications written and compiled against the Kudu 1.15 client library will run without
modification against the Kudu 1.16 client library. Applications written and compiled
against the Kudu 1.16 client library will run without modification against the Kudu 1.15
client library.</p>
</li>
<li>
<p>The Kudu 1.16 Python client is API-compatible with Kudu 1.15. Applications
written against Kudu 1.15 will continue to run against the Kudu 1.16 client
and vice-versa.</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.16.0_known_issues"><a class="link" href="#rn_1.16.0_known_issues">Known Issues and Limitations</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Please refer to the <a href="known_issues.html">Known Issues and Limitations</a> section of the
documentation.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.16.0_contributors"><a class="link" href="#rn_1.16.0_contributors">Contributors</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Kudu 1.16.0 includes contributions from 17 people, including 5 first-time contributors:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Riza Suminto</p>
</li>
<li>
<p>Zoltan Chovan</p>
</li>
<li>
<p>kedeng</p>
</li>
<li>
<p>khazarmammadli</p>
</li>
<li>
<p>yejiabao</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Thank you for your contributions!</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="resources_and_next_steps"><a class="link" href="#resources_and_next_steps">Resources</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="http://kudu.apache.org">Kudu Website</a></p>
</li>
<li>
<p><a href="http://github.com/apache/kudu">Kudu GitHub Repository</a></p>
</li>
<li>
<p><a href="index.html">Kudu Documentation</a></p>
</li>
<li>
<p><a href="prior_release_notes.html">Release notes for older releases</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_installation_options"><a class="link" href="#_installation_options">Installation Options</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>For full installation details, see <a href="installation.html">Kudu Installation</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_next_steps"><a class="link" href="#_next_steps">Next Steps</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="quickstart.html">Kudu Quickstart</a></p>
</li>
<li>
<p><a href="installation.html">Installing Kudu</a></p>
</li>
<li>
<p><a href="configuration.html">Configuring Kudu</a></p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div id="toc" data-spy="affix" data-offset-top="70">
<ul>
<li>
<a href="index.html">Introducing Kudu</a>
</li>
<li>
<span class="active-toc">Kudu Release Notes</span>
<ul class="sectlevel1">
<li><a href="#rn_1.16.0_upgrade_notes">Upgrade Notes</a></li>
<li><a href="#rn_1.16.0_deprecations">Deprecations</a></li>
<li><a href="#rn_1.16.0_new_features">New features</a></li>
<li><a href="#rn_1.16.0_improvements">Optimizations and improvements</a></li>
<li><a href="#rn_1.16.0_fixed_issues">Fixed Issues</a></li>
<li><a href="#rn_1.16.0_wire_compatibility">Wire Protocol compatibility</a></li>
<li><a href="#rn_1.16.0_incompatible_changes">Incompatible Changes in Kudu 1.16.0</a>
<ul class="sectlevel2">
<li><a href="#rn_1.16.0_client_compatibility">Client Library Compatibility</a></li>
</ul>
</li>
<li><a href="#rn_1.16.0_known_issues">Known Issues and Limitations</a></li>
<li><a href="#rn_1.16.0_contributors">Contributors</a></li>
<li><a href="#resources_and_next_steps">Resources</a></li>
<li><a href="#_installation_options">Installation Options</a></li>
<li><a href="#_next_steps">Next Steps</a></li>
</ul>
</li>
<li>
<a href="quickstart.html">Quickstart Guide</a>
</li>
<li>
<a href="installation.html">Installation Guide</a>
</li>
<li>
<a href="configuration.html">Configuring Kudu</a>
</li>
<li>
<a href="hive_metastore.html">Using the Hive Metastore with Kudu</a>
</li>
<li>
<a href="kudu_impala_integration.html">Using Impala with Kudu</a>
</li>
<li>
<a href="administration.html">Administering Kudu</a>
</li>
<li>
<a href="troubleshooting.html">Troubleshooting Kudu</a>
</li>
<li>
<a href="developing.html">Developing Applications with Kudu</a>
</li>
<li>
<a href="schema_design.html">Kudu Schema Design</a>
</li>
<li>
<a href="scaling_guide.html">Kudu Scaling Guide</a>
</li>
<li>
<a href="security.html">Kudu Security</a>
</li>
<li>
<a href="transaction_semantics.html">Kudu Transaction Semantics</a>
</li>
<li>
<a href="background_tasks.html">Background Maintenance Tasks</a>
</li>
<li>
<a href="configuration_reference.html">Kudu Configuration Reference</a>
</li>
<li>
<a href="command_line_tools_reference.html">Kudu Command Line Tools Reference</a>
</li>
<li>
<a href="metrics_reference.html">Kudu Metrics Reference</a>
</li>
<li>
<a href="known_issues.html">Known Issues and Limitations</a>
</li>
<li>
<a href="contributing.html">Contributing to Kudu</a>
</li>
<li>
<a href="export_control.html">Export Control Notice</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="row">
<div class="col-md-9">
<p class="small">
Copyright &copy; 2020 The Apache Software Foundation. Last updated 2022-04-11 16:50:08 +0200
</p>
<p class="small">
Apache Kudu, Kudu, Apache, the Apache feather logo, and the Apache Kudu
project logo are either registered trademarks or trademarks of The
Apache Software Foundation in the United States and other countries.
</p>
</div>
<div class="col-md-3">
<a class="pull-right" href="https://www.apache.org/events/current-event.html">
<img src="https://www.apache.org/events/current-event-234x60.png"/>
</a>
</div>
</div>
</footer>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
// Try to detect touch-screen devices. Note: Many laptops have touch screens.
$(document).ready(function() {
if ("ontouchstart" in document.documentElement) {
$(document.documentElement).addClass("touch");
} else {
$(document.documentElement).addClass("no-touch");
}
});
</script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
crossorigin="anonymous"></script>
<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-68448017-1', 'auto');
ga('send', 'pageview');
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/3.1.0/anchor.js"></script>
<script>
anchors.options = {
placement: 'right',
visible: 'touch',
};
anchors.add();
</script>
</body>
</html>