blob: 7438c5873f4daacde9cab0d04b7dafe305dcc76c [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">
<title>Apache DistributedLog</title>
<meta name="description" content="Apache DistributedLog is an high performance replicated log.
">
<link rel="stylesheet" href="/docs/latest/styles/site.css">
<link rel="stylesheet" href="/docs/latest/css/theme.css">
<!-- JQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="/docs/latest/js/bootstrap.min.js"></script>
<link rel="canonical" href="http://bookkeeper.apache.org/distributedlog/docs/latest/user_guide/configuration/client.html" data-proofer-ignore>
<link rel="alternate" type="application/rss+xml" title="Apache DistributedLog" href="http://bookkeeper.apache.org/distributedlog/docs/latest/feed.xml">
<!-- Font Awesome -->
<script src="//cdnjs.cloudflare.com/ajax/libs/anchor-js/3.2.0/anchor.min.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','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-83870961-1', 'auto');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
<link rel="shortcut icon" type="image/x-icon" href="/images/favicon.ico">
</head>
<body role="document">
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<a href="/" class="navbar-brand" >
<img alt="Brand" style="height: 28px" src="/docs/latest/images/distributedlog_logo_navbar.png">
</a>
<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>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<!-- Overview -->
<li><a href="/docs/latest/">V0.6.0</a></li>
<!-- Concepts -->
<li><a href="/docs/latest/basics/introduction">Concepts</a></li>
<!-- Quick Start -->
<li>
<a href="/docs/latest/start" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Start<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="/docs/latest/start/building.html">
Build DistributedLog from Source
</a>
</li>
<li>
<a href="/docs/latest/start/download.html">
Download Releases
</a>
</li>
<li role="separator" class="divider"></li>
<li class="dropdown-header"><strong>Quickstart</strong></li>
<li>
<a href="/docs/latest/start/quickstart.html">
Setup & Run Example
</a>
</li>
<li>
<a href="/docs/latest/tutorials/basic-1.html">
API - Write Records (via core library)
</a>
</li>
<li>
<a href="/docs/latest/tutorials/basic-2.html">
API - Write Records (via write proxy)
</a>
</li>
<li>
<a href="/docs/latest/tutorials/basic-5.html">
API - Read Records
</a>
</li>
<li role="separator" class="divider"></li>
<li class="dropdown-header"><strong>Deployment</strong></li>
<li>
<a href="/docs/latest/deployment/cluster.html">
Cluster Setup
</a>
</li>
<li>
<a href="/docs/latest/deployment/global-cluster.html">
Global Cluster Setup
</a>
</li>
<li>
<a href="/docs/latest/deployment/kubernetes.html">
Kubernetes
</a>
</li>
</ul>
</li>
<!-- API -->
<li>
<a href="/docs/latest/start" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">API<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="/docs/latest/api/java">Java</a></li>
</ul>
</li>
<!-- User Guide -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">User Guide<span class="caret"></span></a>
<ul class="dropdown-menu">
<li>
<a href="/docs/latest/basics/introduction.html">
Introduction
</a>
</li>
<li>
<a href="/docs/latest/user_guide/considerations/main.html">
Considerations
</a>
</li>
<li>
<a href="/docs/latest/user_guide/architecture/main.html">
Architecture
</a>
</li>
<li>
<a href="/docs/latest/user_guide/api/main.html">
API
</a>
</li>
<li>
<a href="/docs/latest/user_guide/configuration/main.html">
Configuration
</a>
</li>
<li>
<a href="/docs/latest/user_guide/design/main.html">
Detail Design
</a>
</li>
<li>
<a href="/docs/latest/user_guide/globalreplicatedlog/main.html">
Global Replicated Log
</a>
</li>
<li>
<a href="/docs/latest/user_guide/implementation/main.html">
Implementation
</a>
</li>
<li>
<a href="/docs/latest/user_guide/references/main.html">
References
</a>
</li>
</ul>
</li>
<!-- Admin Guide -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Admin Guide<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="/docs/latest/deployment/cluster">Cluster Setup</a></li>
<li>
<a href="/docs/latest/admin_guide/operations.html">
Operations
</a>
</li>
<li>
<a href="/docs/latest/admin_guide/loadtest.html">
Load Test
</a>
</li>
<li>
<a href="/docs/latest/admin_guide/performance.html">
Performance Tuning
</a>
</li>
<li>
<a href="/docs/latest/admin_guide/hardware.html">
Hardware
</a>
</li>
<li>
<a href="/docs/latest/admin_guide/monitoring.html">
Monitoring
</a>
</li>
<li>
<a href="/docs/latest/admin_guide/zookeeper.html">
ZooKeeper
</a>
</li>
<li>
<a href="/docs/latest/admin_guide/bookkeeper.html">
BookKeeper
</a>
</li>
</ul>
</li>
<!-- Tutorials -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Tutorials<span class="caret"></span></a>
<ul class="dropdown-menu">
<li class="dropdown-header"><strong>Basic</strong></li>
<li><a href="/docs/latest/tutorials/basic-1">Write Records (via Core Library)</a></li>
<li><a href="/docs/latest/tutorials/basic-2">Write Records (via Write Proxy)</a></li>
<li><a href="/docs/latest/tutorials/basic-3">Write Records to multiple streams</a></li>
<li><a href="/docs/latest/tutorials/basic-4">Atomic Write Records</a></li>
<li><a href="/docs/latest/tutorials/basic-5">Tailing Read Records</a></li>
<li><a href="/docs/latest/tutorials/basic-6">Rewind Read Records</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header"><strong>Messaging</strong></li>
<li>
<a href="/docs/latest/tutorials/messaging-1.html">
Write records to partitioned streams
</a>
</li>
<li>
<a href="/docs/latest/tutorials/messaging-2.html">
Write records to multiple streams (load balancer)
</a>
</li>
<li>
<a href="/docs/latest/tutorials/messaging-3.html">
At-least-once Processing
</a>
</li>
<li>
<a href="/docs/latest/tutorials/messaging-4.html">
Exact-Once Processing
</a>
</li>
<li>
<a href="/docs/latest/tutorials/messaging-5.html">
Implement a kafka-like pub/sub system
</a>
</li>
<li role="separator" class="divider"></li>
<li class="dropdown-header"><strong>Replicated State Machines</strong></li>
<li>
<a href="/docs/latest/tutorials/replicatedstatemachines.html">
Build replicated state machines
</a>
</li>
<li role="separator" class="divider"></li>
<li class="dropdown-header"><strong>Analytics</strong></li>
<li><a href="/docs/latest/tutorials/analytics-mapreduce">Process log streams using MapReduce</a></li>
</ul>
</li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<link rel="stylesheet" href="">
<div class="container" role="main">
<div class="row">
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you 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="row">
<!-- Sub Navigation -->
<div class="col-sm-3">
<ul id="sub-nav">
<li><a href="/docs/latest/user_guide/main.html" class="">User Guide</a>
<ul>
<li>
<a href="/docs/latest/basics/introduction.html" class="">
Introduction
</a>
<ul>
</ul>
</li>
<li>
<a href="/docs/latest/user_guide/considerations/main.html" class="">
Considerations
</a>
<ul>
</ul>
</li>
<li>
<a href="/docs/latest/user_guide/architecture/main.html" class="">
Architecture
</a>
<ul>
</ul>
</li>
<li>
<a href="/docs/latest/user_guide/api/main.html" class="">
API
</a>
<ul>
<li>
<a href="/docs/latest/user_guide/api/core.html" class="active">
Core Library API
</a>
</li>
<li>
<a href="/docs/latest/user_guide/api/proxy.html" class="active">
Proxy Client API
</a>
</li>
<li>
<a href="/docs/latest/user_guide/api/practice.html" class="active">
Best Practise
</a>
</li>
</ul>
</li>
<li>
<a href="/docs/latest/user_guide/configuration/main.html" class="">
Configuration
</a>
<ul>
<li>
<a href="/docs/latest/user_guide/configuration/core.html" class="active">
Core Library Configuration
</a>
</li>
<li>
<a href="/docs/latest/user_guide/configuration/proxy.html" class="active">
Write Proxy Configuration
</a>
</li>
<li>
<a href="/docs/latest/user_guide/configuration/client.html" class="active">
Client Configuration
</a>
</li>
<li>
<a href="/docs/latest/user_guide/configuration/perlog.html" class="active">
Per Stream Configuration
</a>
</li>
</ul>
</li>
<li>
<a href="/docs/latest/user_guide/design/main.html" class="">
Detail Design
</a>
<ul>
</ul>
</li>
<li>
<a href="/docs/latest/user_guide/globalreplicatedlog/main.html" class="">
Global Replicated Log
</a>
<ul>
</ul>
</li>
<li>
<a href="/docs/latest/user_guide/implementation/main.html" class="">
Implementation
</a>
<ul>
<li>
<a href="/docs/latest/user_guide/implementation/storage.html" class="active">
Storage
</a>
</li>
</ul>
</li>
<li>
<a href="/docs/latest/user_guide/references/main.html" class="">
References
</a>
<ul>
<li>
<a href="/docs/latest/user_guide/references/metrics.html" class="active">
Metrics
</a>
</li>
<li>
<a href="/docs/latest/user_guide/references/features.html" class="active">
Available Features
</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<!-- Main -->
<div class="col-sm-9">
<!-- Top anchor -->
<a href="#top"></a>
<!-- Breadcrumbs above the main heading -->
<ol class="breadcrumb">
<li><a href="/docs/latest/user_guide/main.html">User Guide</a></li>
<li><a href="/docs/latest/user_guide/configuration/main.html">Configuration</a></li>
<li class="active">Client Configuration</li>
</ol>
<div class="text">
<!-- Content -->
<div class="contents topic" id="client-configuration">
<p class="topic-title first">Client Configuration</p>
<ul class="simple">
<li><a class="reference internal" href="#id1" id="id2">Client Configuration</a><ul>
<li><a class="reference internal" href="#client-builder-settings" id="id3">Client Builder Settings</a><ul>
<li><a class="reference internal" href="#common-settings" id="id4">Common Settings</a></li>
<li><a class="reference internal" href="#environment-settings" id="id5">Environment Settings</a></li>
<li><a class="reference internal" href="#redirection-settings" id="id6">Redirection Settings</a></li>
<li><a class="reference internal" href="#channel-settings" id="id7">Channel Settings</a></li>
<li><a class="reference internal" href="#ownership-cache-settings" id="id8">Ownership Cache Settings</a></li>
<li><a class="reference internal" href="#constraint-settings" id="id9">Constraint Settings</a></li>
<li><a class="reference internal" href="#stats-settings" id="id10">Stats Settings</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="id1">
<h2><a class="toc-backref" href="#id2">Client Configuration</a></h2>
<p>This section describes the settings used by DistributedLog Write Proxy Client.</p>
<p>Different from core library, the proxy client uses a builder to configure its settings.</p>
<pre class="literal-block">
DistributedLogClient client = DistributedLogClientBuilder.newBuilder()
.name(&quot;test-client&quot;)
.clientId(&quot;test-client-id&quot;)
.finagleNameStr(&quot;inet!localhost:8080&quot;)
.statsReceiver(statsReceiver)
.build();
</pre>
<div class="section" id="client-builder-settings">
<h3><a class="toc-backref" href="#id3">Client Builder Settings</a></h3>
<div class="section" id="common-settings">
<h4><a class="toc-backref" href="#id4">Common Settings</a></h4>
<ul class="simple">
<li><em>name(string)</em>: The name of the distributedlog client.</li>
<li><em>clientId(string)</em>: The client id used for the underneath finagle client. It is a string identifier that server will
use to identify who are the client. So the server can book keep and optionally reject unknown clients.</li>
<li><em>requestTimeoutMs(int)</em>: The maximum time that a request could take before claiming it as failure, in milliseconds.</li>
<li><em>thriftmux(boolean)</em>: The flag to enable or disable using <a class="reference external" href="http://twitter.github.io/finagle/guide/Protocols.html#mux">ThriftMux</a> on the underneath channels.</li>
<li><em>streamFailfast(boolean)</em>: The flag to enable or disable failfast the requests when the server responds <cite>stream-not-ready</cite>.
A stream would be treated as not ready when it is initializing or rolling log segments. The setting is only take effects
when the write proxy also enables <cite>failFastOnStreamNotReady</cite>.</li>
</ul>
</div>
<div class="section" id="environment-settings">
<h4><a class="toc-backref" href="#id5">Environment Settings</a></h4>
<p>DistributedLog uses finagle <a class="reference external" href="http://twitter.github.io/finagle/guide/Names.html">Names</a> to identify the network locations of write proxies.
Names must be supplied when building a distributedlog client through <cite>finagleNameStr</cite> or
<cite>finagleNameStrs</cite>.</p>
<ul class="simple">
<li><em>finagleNameStr(string)</em>: The finagle name to locate write proxies.</li>
<li><em>finagleNameStrs(string, string...)</em>: A list of finagle names. It is typically used by the global replicated log wherever there
are multiple regions of write proxies. The first parameter is the finagle name of local region; while the remaining parameters
are the finagle names for remote regions.</li>
</ul>
</div>
<div class="section" id="redirection-settings">
<h4><a class="toc-backref" href="#id6">Redirection Settings</a></h4>
<p>DistributedLog client can redirect the requests to other write proxies when accessing a write proxy doesn't own the given stream.
This section describes the settings related to redirection.</p>
<ul class="simple">
<li><em>redirectBackoffStartMs(int)</em>: The initial backoff for redirection, in milliseconds.</li>
<li><em>redirectBackoffMaxMs(int)</em>: The maximum backoff for redirection, in milliseconds.</li>
<li><em>maxRedirects(int)</em>: The maximum number of redirections that a request could take before claiming it as failure.</li>
</ul>
</div>
<div class="section" id="channel-settings">
<h4><a class="toc-backref" href="#id7">Channel Settings</a></h4>
<p>DistributedLog client uses <a class="reference external" href="https://twitter.github.io/finagle/guide/Clients.html">FinagleClient</a> to establish the connections to the write proxy. A finagle client will be
created via <a class="reference external" href="http://twitter.github.io/finagle/docs/index.html#com.twitter.finagle.builder.ClientBuilder">ClientBuilder</a> for each write proxy.</p>
<ul class="simple">
<li><em>clientBuilder(ClientBuilder)</em>: The finagle client builder to build connection to each write proxy.</li>
</ul>
</div>
<div class="section" id="ownership-cache-settings">
<h4><a class="toc-backref" href="#id8">Ownership Cache Settings</a></h4>
<p>DistributedLog client maintains a ownership cache locally to archieve stable deterministic request routing. Normally,
the ownership cache is propagated after identified a new owner when performing stream related operations such as write.
The client also does handshaking when initiating connections to a write proxy or periodically for fast failure detection.
During handshaking, the client also pull the latest ownership mapping from write proxies to update its local cache, which
it would help detecting ownership changes quickly, and avoid latency penalty introduced by redirection when ownership changes.</p>
<ul class="simple">
<li><em>handshakeWithClientInfo(boolean)</em>: The flag to enable or disable pulling ownership mapping during handshaking.</li>
<li><em>periodicHandshakeIntervalMs(long)</em>: The periodic handshake interval in milliseconds. Every provided interval, the DL client
will handshake with existing proxies. It would detect proxy failures during handshaking. If the interval is already greater than
<cite>periodicOwnershipSyncIntervalMs</cite>, the handshake will pull the latest ownership mapping. Otherwise, it will not. The default
value is 5 minutes. Setting it to 0 or negative number will disable this feature.</li>
<li><em>periodicOwnershipSyncIntervalMs(long)</em>: The periodic ownership sync interval, in milliseconds. If periodic handshake is
enabled, the handshake will sync ownership if the elapsed time is greater than the sync interval.</li>
<li><em>streamNameRegex(string)</em>: The regex to match the stream names that the client cares about their ownerships.</li>
</ul>
</div>
<div class="section" id="constraint-settings">
<h4><a class="toc-backref" href="#id9">Constraint Settings</a></h4>
<ul class="simple">
<li><em>checksum(boolean)</em>: The flag to enable/disable checksum validation on requests that sent to proxy.</li>
</ul>
</div>
<div class="section" id="stats-settings">
<h4><a class="toc-backref" href="#id10">Stats Settings</a></h4>
<ul class="simple">
<li><em>statsReceiver(StatsReceiver)</em>: The stats receiver used for collecting stats exposed by this client.</li>
<li><em>streamStatsReceiver(StatsReceiver)</em>: The stats receiver used for collecting per stream stats exposed by this client.</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<hr>
<div class="row">
<div class="col-xs-12">
<footer>
<p class="text-center">&copy; Copyright 2016
<a href="http://www.apache.org">The Apache Software Foundation.</a> All Rights Reserved.
</p>
<p class="text-center">
<a href="/docs/latest/feed.xml">RSS Feed</a>
</p>
</footer>
</div>
</div>
<!-- container div end -->
</div>
<script>
(function () {
'use strict';
anchors.options.placement = 'right';
anchors.add();
})();
</script>
</body>
</html>