blob: 8fa36e23afb06b0e6b9e8556a40b632b465987ac [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.13.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.13.0 Release Notes</h1>
<div class="sect1">
<h2 id="rn_1.13.0_upgrade_notes"><a class="link" href="#rn_1.13.0_upgrade_notes">Upgrade Notes</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>The Sentry integration has been removed and the Ranger integration should now
be used in its place for fine-grained authorization.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.13.0_deprecations"><a class="link" href="#rn_1.13.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>
<li>
<p>The <code>kudu-mapreduce</code> integration has been deprecated and may be removed in the
next minor release. Similar functionality and capabilities now exist via the
Apache Spark, Apache Hive, Apache Impala, and Apache NiFi integrations.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.13.0_new_features"><a class="link" href="#rn_1.13.0_new_features">New features</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Added table ownership support. All newly created tables are automatically
owned by the user creating them. It is also possible to change the owner by
altering the table. You can also assign privileges to table owners via Apache
Ranger (see <a href="https://issues.apache.org/jira/browse/KUDU-3090">KUDU-3090</a>).</p>
</li>
<li>
<p>An experimental feature is added to Kudu that allows it to automatically
rebalance tablet replicas among tablet servers. The background task can be
enabled by setting the <code>--auto_rebalancing_enabled</code> flag on the Kudu masters.
Before starting auto-rebalancing on an existing cluster, the CLI rebalancer
tool should be run first (see
<a href="https://issues.apache.org/jira/browse/KUDU-2780">KUDU-2780</a>).</p>
</li>
<li>
<p>Bloom filter column predicate pushdown has been added to allow optimized
execution of filters which match on a set of column values with a
false-positive rate. Support for Impala queries utilizing Bloom filter
predicate is available yielding performance improvements of 19% to 30% in TPC-H
benchmarks and around 41% improvement for distributed joins across large
tables. Support for Spark is not yet available. (see
<a href="https://issues.apache.org/jira/browse/KUDU-2483">KUDU-2483</a>).</p>
</li>
<li>
<p>AArch64-based (ARM) architectures are now supported including published Docker
images.</p>
</li>
<li>
<p>The Java client now supports the columnar row format returned from the server
transparently. Using this format can reduce the server CPU and size of the
request over the network for scans. The columnar format can be enabled via the
setRowDataFormat() method on the KuduScanner.</p>
</li>
<li>
<p>An experimental feature that can be enabled by setting the
<code>--enable_workload_score_for_perf_improvement_ops</code> prioritizes flushing and
compacting hot tablets.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.13.0_improvements"><a class="link" href="#rn_1.13.0_improvements">Optimizations and improvements</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Hive metastore synchronization now supports Hive 3 and later.</p>
</li>
<li>
<p>The Spark KuduContext accumulator metrics now track operation counts per table
instead of cumulatively for all tables.</p>
</li>
<li>
<p>The <code>kudu local_replica delete</code> CLI tool now accepts multiple tablet
identifiers. Along with the newly added <code>--ignore_nonexistent</code> flag, this
helps with scripting scenarios when removing multiple tablet replicas from a
particular Tablet Server.</p>
</li>
<li>
<p>Both Master’s and Tablet Server’s web UI now displays the name for a service
thread pool group at the <code>/threadz</code> page</p>
</li>
<li>
<p>Introduced <code>queue_overflow_rejections_</code> metrics for both Masters and Tablet
Servers: number of RPC requests of a particular type dropped due to RPC
service queue overflow.</p>
</li>
<li>
<p>Introduced a CoDel-like queue control mechanism for the apply queue. This
helps to avoid accumulating too many write requests and timing them out in
case of seek-bound workloads (e.g., uniform random inserts). The newly
introduced queue control mechanism is disabled by default. To enable it, set
the <code>--tablet_apply_pool_overload_threshold_ms</code> Tablet Server’s flag to
appropriate value, e.g. 250 (see
<a href="https://issues.apache.org/jira/browse/KUDU-1587">KUDU-1587</a>).</p>
</li>
<li>
<p>Java client’s error collector can be resized (see
<a href="https://issues.apache.org/jira/browse/KUDU-1422">KUDU-1422</a>).</p>
</li>
<li>
<p>Calls to the Kudu master server are now drastically reduced when using scan
tokens. Previously deserializing a scan token would result in a GetTableSchema
request and potentially a GetTableLocations request. Now the table schema and
location information is serialized into the scan token itself avoiding the
need for any requests to the master when processing them.</p>
</li>
<li>
<p>The default size of Master’s RPC queue is now 100 (it was 50 in earlier
releases). This is to optimize for use cases where a Kudu cluster has many
clients working concurrently.</p>
</li>
<li>
<p>Masters now have an option to cache table location responses. This is
targeted for Kudu clusters which have many clients working concurrently. By
default, the caching of table location responses is disabled. To enable table
location caching, set the proper capacity of the table location cache using
Master’s <code>--table_locations_cache_capacity_mb</code> flag (setting to 0 disables the
caching). Up to 17% of improvement is observed in GetTableLocations request
rate when enabling the caching.</p>
</li>
<li>
<p>Removed lock contention on Raft consensus lock in Tablet Servers while
processing a write request. This helps to avoid RPC queue overflows when
handling concurrent write requests to the same tablet from multiple clients
(see <a href="https://issues.apache.org/jira/browse/KUDU-2727">KUDU-2727</a>).</p>
</li>
<li>
<p>Master’s performance for handling concurrent GetTableSchema requests has been
improved. End-to-end tests indicated up to 15% improvement in sustained
request rate for high concurrency scenarios.</p>
</li>
<li>
<p>Kudu servers now use protobuf Arena objects to perform all RPC
request/response-related memory allocations. This gives a boost for overall
RPC performance, and with further optimization the result request rate
was increased significantly for certain methods. For example, the result request
rate increased up to 25% for Master’s GetTabletLocations() RPC in case of
highly concurrent scenarios (see
<a href="https://issues.apache.org/jira/browse/KUDU-636">KUDU-636</a>).</p>
</li>
<li>
<p>Tablet Servers now use protobuf Arena for allocating Raft-related runtime
structures. This results in substantial reduction of CPU cycles used and
increases write throughput (see
<a href="https://issues.apache.org/jira/browse/KUDU-636">KUDU-636</a>).</p>
</li>
<li>
<p>Tablet Servers now use protobuf Arena for allocating EncodedKeys to reduce
allocator contention and improve memory locality (see
<a href="https://issues.apache.org/jira/browse/KUDU-636">KUDU-636</a>).</p>
</li>
<li>
<p>Bloom filter predicate evaluation for scans can be computationally expensive.
A heuristic has been added that verifies rejection rate of the supplied Bloom
filter predicate below which the Bloom filter predicate is automatically
disabled. This helped reduce regression observed with Bloom filter predicate
in TPC-H benchmark query #9 (see
<a href="https://issues.apache.org/jira/browse/KUDU-3140">KUDU-3140</a>).</p>
</li>
<li>
<p>Improved scan performance of dictionary and plain-encoded string columns by
avoiding copying them (see
<a href="https://issues.apache.org/jira/browse/KUDU-2844">KUDU-2844</a>).</p>
</li>
<li>
<p>Improved maintenance manager&#8217;s heuristics to prioritize larger memstores
(see <a href="https://issues.apache.org/jira/browse/KUDU-3180">KUDU-3180</a>).</p>
</li>
<li>
<p>Spark client&#8217;s KuduReadOptions now supports setting a snapshot timestamp for
repeatable reads with READ_AT_SNAPSHOT consistency mode (see
<a href="https://issues.apache.org/jira/browse/KUDU-3177">KUDU-3177</a>).</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.13.0_fixed_issues"><a class="link" href="#rn_1.13.0_fixed_issues">Fixed Issues</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Kudu scans now honor location assignments when multiple tablet servers are
co-located with the client.</p>
</li>
<li>
<p>Fixed a bug that caused IllegalArgumentException to be thrown when trying to
create a predicate for a DATE column in Kudu Java client (see
<a href="https://issues.apache.org/jira/browse/KUDU-3152">KUDU-3152</a>).</p>
</li>
<li>
<p>Fixed a potential race when multiple RPCs work on the same scanner object.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.13.0_wire_compatibility"><a class="link" href="#rn_1.13.0_wire_compatibility">Wire Protocol compatibility</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Kudu 1.13.0 is wire-compatible with previous versions of Kudu:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Kudu 1.13 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.12 and Kudu 1.13 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.13 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.13 and versions earlier than 1.3:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>If a Kudu 1.13 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.13 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.13.0_incompatible_changes"><a class="link" href="#rn_1.13.0_incompatible_changes">Incompatible Changes in Kudu 1.13.0</a></h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="rn_1.13.0_client_compatibility"><a class="link" href="#rn_1.13.0_client_compatibility">Client Library Compatibility</a></h3>
<div class="ulist">
<ul>
<li>
<p>The Kudu 1.13 Java client library is API- and ABI-compatible with Kudu 1.12. Applications
written against Kudu 1.12 will compile and run against the Kudu 1.13 client library and
vice-versa.</p>
</li>
<li>
<p>The Kudu 1.13 C&#43;&#43; client is API- and ABI-forward-compatible with Kudu 1.12.
Applications written and compiled against the Kudu 1.12 client library will run without
modification against the Kudu 1.13 client library. Applications written and compiled
against the Kudu 1.13 client library will run without modification against the Kudu 1.12
client library.</p>
</li>
<li>
<p>The Kudu 1.13 Python client is API-compatible with Kudu 1.12. Applications
written against Kudu 1.12 will continue to run against the Kudu 1.13 client
and vice-versa.</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.13.0_known_issues"><a class="link" href="#rn_1.13.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.13.0_contributors"><a class="link" href="#rn_1.13.0_contributors">Contributors</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Kudu 1.13.0 includes contributions from 22 people, including 9 first-time
contributors:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Jim Apple</p>
</li>
<li>
<p>Kevin J McCarthy</p>
</li>
<li>
<p>Li Zhiming</p>
</li>
<li>
<p>Mahesh Reddy</p>
</li>
<li>
<p>Romain Rigaux</p>
</li>
<li>
<p>RuiChen</p>
</li>
<li>
<p>Shuping Zhou</p>
</li>
<li>
<p>ningw</p>
</li>
<li>
<p>wenjie</p>
</li>
</ul>
</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.13.0_upgrade_notes">Upgrade Notes</a></li>
<li><a href="#rn_1.13.0_deprecations">Deprecations</a></li>
<li><a href="#rn_1.13.0_new_features">New features</a></li>
<li><a href="#rn_1.13.0_improvements">Optimizations and improvements</a></li>
<li><a href="#rn_1.13.0_fixed_issues">Fixed Issues</a></li>
<li><a href="#rn_1.13.0_wire_compatibility">Wire Protocol compatibility</a></li>
<li><a href="#rn_1.13.0_incompatible_changes">Incompatible Changes in Kudu 1.13.0</a>
<ul class="sectlevel2">
<li><a href="#rn_1.13.0_client_compatibility">Client Library Compatibility</a></li>
</ul>
</li>
<li><a href="#rn_1.13.0_known_issues">Known Issues and Limitations</a></li>
<li><a href="#rn_1.13.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 2020-12-01 12:29:41 -0800
</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>