blob: 57434aeeb3670d0fa5a1802dc38cb38c56203986 [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/proxy.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">Write Proxy Configuration</li>
</ol>
<div class="text">
<!-- Content -->
<div class="contents topic" id="write-proxy-configuration">
<p class="topic-title first">Write Proxy Configuration</p>
<ul class="simple">
<li><a class="reference internal" href="#id1" id="id2">Write Proxy Configuration</a><ul>
<li><a class="reference internal" href="#server-configuration-settings" id="id3">Server Configuration Settings</a><ul>
<li><a class="reference internal" href="#rate-limit-settings" id="id4">Rate Limit Settings</a></li>
<li><a class="reference internal" href="#stream-limit-settings" id="id5">Stream Limit Settings</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="id1">
<h2><a class="toc-backref" href="#id2">Write Proxy Configuration</a></h2>
<p>This section describes the configuration settings used by DistributedLog Write Proxy.</p>
<p>All the server related settings are managed in <cite>ServerConfiguration</cite>. Similar as <cite>DistributedLogConfiguration</cite>,
it is also a properties based configuration, which extends from Apache commons <cite>CompositeConfiguration</cite>. All
server related settings are in lower case and use <cite>'_'</cite> to concat words. For example, <cite>server_region_id</cite> means
the region id used by the write proxy server.</p>
<div class="section" id="server-configuration-settings">
<h3><a class="toc-backref" href="#id3">Server Configuration Settings</a></h3>
<ul class="simple">
<li><em>server_dlsn_version</em>: The version of serialized format of DLSN. The default value is 1. It is not recommended to change it.</li>
<li><em>server_region_id</em>: The region id used by the server to instantiate a DL namespace. The default value is <cite>LOCAL</cite>.</li>
<li><em>server_port</em>: The listen port of the write proxy. The default value is 0.</li>
<li><em>server_shard</em>: The shard id used by the server to identify itself. It is optional but recommended to set. For example, if
the write proxy is running in <cite>Apache Aurora</cite>, you could use the instance id as the shard id. The default value is -1 (unset).</li>
<li><em>server_threads</em>: The number of threads for the executor of this server. The default value is the available processors.</li>
<li><em>server_enable_perstream_stat</em>: The flag to enable per stream stat in write proxy. It is different from <cite>enablePerStreamStat</cite>
in core library. The setting here is controlling exposing the per stream stat exposed by write proxy, while <cite>enablePerStreamStat</cite>
is to control expose the per stream stat exposed by the core library. It is enabled by default.</li>
<li><em>server_graceful_shutdown_period_ms</em>: The graceful shutdown period in milliseconds. The default value is 0.</li>
<li><em>server_service_timeout_ms</em>: The timeout period for the execution of a stream operation in write proxy. If it is positive,
write proxy will timeout requests if they are taking longer time than the threshold. Otherwise, the timeout feature is disabled.
By default, it is 0 (disabled).</li>
<li><em>server_stream_probation_timeout_ms</em>: The time period that a stream should be kept in cache in probationary state after service
timeout, in order to prevent ownership reacquiring. The unit is milliseconds. The default value is 5 minutes.</li>
<li><em>stream_partition_converter_class</em>: The stream-to-partition convert class. The converter is used to group streams together, which
these streams can apply same <cite>per-stream</cite> configuration settings or same other constraints. By default, it is an
<cite>IdentityStreamPartitionConverter</cite> which doesn't group any streams.</li>
</ul>
<div class="section" id="rate-limit-settings">
<h4><a class="toc-backref" href="#id4">Rate Limit Settings</a></h4>
<p>This section describes the rate limit settings per write proxy.</p>
<p>All the rate limit settings have both <cite>soft</cite> and <cite>hard</cite> thresholds. If the throughput goes above <cite>soft</cite> limit,
the requests won't be rejected but just logging in the stat. But if the throughput goes above <cite>hard</cite> limit,
the requests would be rejected immediately.</p>
<p>NOTE: <cite>bps</cite> stands for <cite>bytes per second</cite>, while <cite>rps</cite> stands for <cite>requests per second</cite>.</p>
<ul class="simple">
<li><em>bpsSoftServiceLimit</em>: The soft limit for bps. Setting it to 0 or negative value will disable this feature.
By default it is disabled.</li>
<li><em>bpsHardServiceLimit</em>: The hard limit for bps. Setting it to 0 or negative value will disable this feature.
By default it is disabled.</li>
<li><em>rpsSoftServiceLimit</em>: The soft limit for rps. Setting it to 0 or negative value will disable this feature.
By default it is disabled.</li>
<li><em>rpsHardServiceLimit</em>: The hard limit for rps. Setting it to 0 or negative value will disable this feature.
By default it is disabled.</li>
</ul>
<p>There are two additional rate limiting settings that related to stream acquisitions.</p>
<ul class="simple">
<li><em>rpsStreamAcquireServiceLimit</em>: The rate limit for rps. When the rps goes above this threshold, the write proxy
will stop accepting serving new streams.</li>
<li><em>bpsStreamAcquireServiceLimit</em>: The rate limit for bps. When the bps goes above this threshold, the write proxy
will stop accepting serving new streams.</li>
</ul>
</div>
<div class="section" id="stream-limit-settings">
<h4><a class="toc-backref" href="#id5">Stream Limit Settings</a></h4>
<p>This section describes the stream limit settings per write proxy. They are the constraints that each write proxy
will apply when deciding whether to own given streams.</p>
<ul class="simple">
<li><em>maxAcquiredPartitionsPerProxy</em>: The maximum number of partitions per stream that a write proxy is allowed to
serve. Setting it to 0 or negative value will disable this feature. By default it is unlimited.</li>
<li><em>maxCachedPartitionsPerProxy</em>: The maximum number of partitions per stream that a write proxy is allowed to cache.
Setting it to 0 or negative value will disable this feature. By default it is unlimited.</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>