blob: 25ab7e3d405a1f79610c898850225c289d283ba4 [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.15.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://join.slack.com/t/getkudu/shared_invite/zt-244b4zvki-hB1q9IbAk6CqHNMZHvUALA">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.15.0 Release Notes</h1>
<div class="sect1">
<h2 id="rn_1.15.0_upgrade_notes"><a class="link" href="#rn_1.15.0_upgrade_notes">Upgrade Notes</a></h2>
<div class="sectionbody">
</div>
</div>
<div class="sect1">
<h2 id="rn_1.15.0_obsoletions"><a class="link" href="#rn_1.15.0_obsoletions">Obsoletions</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>The <code>kudu-mapreduce</code> integration has been removed in the 1.15.0 release.
Similar functionality and capabilities now exist via the Apache Spark, Apache Hive, Apache Impala,
and Apache NiFi integrations. See <a href="https://issues.apache.org/jira/browse/KUDU-3142">KUDU-3142</a>
for details.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.15.0_deprecations"><a class="link" href="#rn_1.15.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.15.0_new_features"><a class="link" href="#rn_1.15.0_new_features">New features</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Kudu now experimentally supports multi-row transactions. Currently only <code>INSERT</code> and
<code>INSERT_IGNORE</code> operations are supported.
See <a href="https://github.com/apache/kudu/blob/master/docs/design-docs/transactions.adoc">here</a> for a
design overview of this feature.</p>
</li>
<li>
<p>Kudu now supports Raft configuration change for Kudu masters and CLI tools for orchestrating
addition and removal of masters in a Kudu cluster. These tools substantially simplify the process
of migrating to multiple masters, recovering a dead master and removing masters from a Kudu cluster.
For detailed steps, see the latest administration documentation. This feature is evolving and
the steps to add, remove and recover masters may change in the future.
See <a href="https://issues.apache.org/jira/browse/KUDU-2181">KUDU-2181</a> for details.</p>
</li>
<li>
<p>Kudu now supports table comments directly on Kudu tables which are automatically synchronized
when the Hive Metastore integration is enabled. These comments can be added at table creation time
and changed via table alteration.</p>
</li>
<li>
<p>Kudu now experimentally supports per-table size limits based on leader disk space usage or number
of rows. When generating new authorization tokens, Masters will now consider the size limits and
strip tokens of <code>INSERT</code> and <code>UPDATE</code> privileges if either limit is reached. To enable this feature,
set the <code>--enable_table_write_limit</code> master flag; adjust the <code>--table_disk_size_limit</code> and
<code>--table_row_count_limit</code> flags as desired or use the <code>kudu table set_limit</code> tool to set limits per
table.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.15.0_improvements"><a class="link" href="#rn_1.15.0_improvements">Optimizations and improvements</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>It is now possible to change the Kerberos Service Principal Name using the <code>--principal</code> flag. The
default SPN is still <code>kudu/_HOST</code>. Clients connecting to a cluster using a non-default SPN must set
the <code>sasl_protocol_name</code> or <code>saslProtocolName</code> to match the SPN base
(i.e. “kudu” if the SPN is “kudu/_HOST”) in the client builder or the Kudu CLI.
See <a href="https://issues.apache.org/jira/browse/KUDU-1884">KUDU-1884</a> for details.</p>
</li>
<li>
<p>Kudu RPC now supports TLSv1.3. Kudu servers and clients automatically negotiate TLSv1.3 for Kudu
RPC if OpenSSL (or Java runtime correspondingly) on each side supports TLSv1.3.
If necessary, use the newly introduced flag <code>--rpc_tls_ciphersuites</code> to customize TLSv1.3-specific
cipher suites at the server side.
See <a href="https://issues.apache.org/jira/browse/KUDU-2871">KUDU-2871</a> for details.</p>
</li>
<li>
<p>TLS ciphers renegotiation for TLSv1.2 and prior protocol versions is now explicitly disabled.
See <a href="https://issues.apache.org/jira/browse/KUDU-1926">KUDU-1926</a> for details.</p>
</li>
<li>
<p>The location assignment for Kudu clients is now disabled by default since it doesn’t bring a lot
of benefits, but rather puts an extra load to Kudu masters. This change reduces the load on Kudu
masters which is essential if too many clients run in a cluster. To enable the location assignment
for clients, override the default by setting <code>--master_client_location_assignment_enabled=true</code> for
Kudu masters.</p>
</li>
<li>
<p>The behavior of the C++ client replica selection for closest replica, the default, was updated to
match the behavior of the Java client. Instead of picking a random replica each time, a static value
is used for each process ensuring that the selection remains deterministic and can benefit from
better caching. See <a href="https://issues.apache.org/jira/browse/KUDU-3248">KUDU-3248</a> for details.</p>
</li>
<li>
<p>The Web UI /rpcz endpoint now displays information on whether an RPC connection is protected by
TLS, and if so, provides information on the negotiated TLS cipher suite.</p>
</li>
<li>
<p>Tooling requests and C++ client requests bound for leader masters will now be retried in the event
the masters cannot be reached.</p>
</li>
<li>
<p>Cluster tooling will now validate that the master argument contains no duplicate values.
See <a href="https://issues.apache.org/jira/browse/KUDU-3226">KUDU-3226</a> for details.</p>
</li>
<li>
<p>The error message output by Kudu Java client in an attempt to write into a non-existent table
partition now contains the table’s name.
See <a href="https://issues.apache.org/jira/browse/KUDU-3267">KUDU-3267</a> for details.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.15.0_fixed_issues"><a class="link" href="#rn_1.15.0_fixed_issues">Fixed Issues</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Fixed a bug in the Kudu tablet servers that could result in a crash when performing an incremental
backup of rows that had many batches of updates.
See <a href="https://issues.apache.org/jira/browse/KUDU-3291">KUDU-3291</a> for more details.</p>
</li>
<li>
<p>The Kudu Java client will now retry scans bound for tablets hosted on quiescing tablet servers at
replicas on other tablet servers. See
<a href="https://issues.apache.org/jira/browse/KUDU-3213">KUDU-3213</a> for more details.</p>
</li>
<li>
<p>Fixed a race between the scheduling of a maintenance op and the destruction of a tablet. This
could previously lead to a crash.
See <a href="https://issues.apache.org/jira/browse/KUDU-3268">KUDU-3268</a> for more details.</p>
</li>
<li>
<p>Fixed crash in Kudu C++ client introduced with KUDU-1802.
See <a href="https://issues.apache.org/jira/browse/KUDU-3254">KUDU-3254</a> for details.</p>
</li>
<li>
<p>Fixed bug in Kudu Java client which manifested in <code>AUTO_FLUSH_BACKGROUND</code> sessions hung in a call
to <code>KuduSession.flush()</code> method. Another sign of the bug were stuck data ingest workloads based on
Java client (e.g., kudu-spark applications) with
"java.lang.AssertionError: This Deferred was already called!" message in the logs.
See <a href="https://issues.apache.org/jira/browse/KUDU-3277">KUDU-3277</a> for details.</p>
</li>
<li>
<p>Fixed crash in Kudu server due to lack of <code>getrandom(2)</code> system call in Linux kernel version
earlier than 3.17 by instead using <code>/dev/random</code> for uuid generation in the Boost library.
Crash includes the following message in the logs
"terminate called after throwing an instance of 'boost::wrapexcept&lt;boost::uuids::entropy_error&gt;'".
See the <a href="https://gerrit.cloudera.org/c/17354/">fix</a> for a sample stack trace.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.15.0_wire_compatibility"><a class="link" href="#rn_1.15.0_wire_compatibility">Wire Protocol compatibility</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Kudu 1.15.0 is wire-compatible with previous versions of Kudu:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Kudu 1.15 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.14 and Kudu 1.15 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.15 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.15 and versions earlier than 1.3:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>If a Kudu 1.15 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.15 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.15.0_incompatible_changes"><a class="link" href="#rn_1.15.0_incompatible_changes">Incompatible Changes in Kudu 1.15.0</a></h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Updated hash computation for empty strings in the FastHash implementation to conform with the
handling in Apache Impala. For Bloom filter predicate pushdown feature that uses FastHash,
this makes the Kudu client older than version 1.15.0 incompatible with Kudu server version 1.15.0
and Kudu client version at or newer than 1.15.0 incompatible with Kudu server version earlier than
1.15.0. Both client library and Kudu server need to be updated to version 1.15.0 or above if using
the Bloom filter predicate feature. One manifestation of this incompatibility is following message
in the logs, "Not implemented: call requires unsupported application feature flags: 4".
See <a href="https://issues.apache.org/jira/browse/KUDU-3286">KUDU-3286</a> for details.</p>
</li>
</ul>
</div>
<div class="sect2">
<h3 id="rn_1.15.0_client_compatibility"><a class="link" href="#rn_1.15.0_client_compatibility">Client Library Compatibility</a></h3>
<div class="ulist">
<ul>
<li>
<p>The Kudu 1.15 Java client library is API- and ABI-compatible with Kudu 1.14. Applications
written against Kudu 1.14 will compile and run against the Kudu 1.15 client library and
vice-versa.</p>
</li>
<li>
<p>The Kudu 1.15 C&#43;&#43; client is API- and ABI-forward-compatible with Kudu 1.14.
Applications written and compiled against the Kudu 1.14 client library will run without
modification against the Kudu 1.15 client library. Applications written and compiled
against the Kudu 1.15 client library will run without modification against the Kudu 1.14
client library.</p>
</li>
<li>
<p>The Kudu 1.15 Python client is API-compatible with Kudu 1.14. Applications
written against Kudu 1.14 will continue to run against the Kudu 1.15 client
and vice-versa.</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rn_1.15.0_known_issues"><a class="link" href="#rn_1.15.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.15.0_contributors"><a class="link" href="#rn_1.15.0_contributors">Contributors</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Kudu 1.15.0 includes contributions from 12 people, including 2 first-time contributors:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Abhishek Chennaka</p>
</li>
<li>
<p>shenxingwuying</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.15.0_upgrade_notes">Upgrade Notes</a></li>
<li><a href="#rn_1.15.0_obsoletions">Obsoletions</a></li>
<li><a href="#rn_1.15.0_deprecations">Deprecations</a></li>
<li><a href="#rn_1.15.0_new_features">New features</a></li>
<li><a href="#rn_1.15.0_improvements">Optimizations and improvements</a></li>
<li><a href="#rn_1.15.0_fixed_issues">Fixed Issues</a></li>
<li><a href="#rn_1.15.0_wire_compatibility">Wire Protocol compatibility</a></li>
<li><a href="#rn_1.15.0_incompatible_changes">Incompatible Changes in Kudu 1.15.0</a>
<ul class="sectlevel2">
<li><a href="#rn_1.15.0_client_compatibility">Client Library Compatibility</a></li>
</ul>
</li>
<li><a href="#rn_1.15.0_known_issues">Known Issues and Limitations</a></li>
<li><a href="#rn_1.15.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; 2023 The Apache Software Foundation. Last updated 2021-06-10 10:32:13 -0700
</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>