| <!DOCTYPE html> |
| |
| |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| |
| <title>Core Library Configuration — DistributedLog 1.0 documentation</title> |
| |
| <link rel="stylesheet" href="../_static/override.css" type="text/css" /> |
| <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| <link rel="stylesheet" href="../_static/bootstrap-3.1.0/css/bootstrap.min.css" type="text/css" /> |
| <link rel="stylesheet" href="../_static/bootstrap-3.1.0/css/bootstrap-theme.min.css" type="text/css" /> |
| <link rel="stylesheet" href="../_static/css/featherlight.min.css" type="text/css" /> |
| <link rel="stylesheet" href="../_static/css/docbird.css" type="text/css" /> |
| <link rel="stylesheet" href="../_static/css/docbird-xs.css" type="text/css" /> |
| <link rel="stylesheet" href="../_static/css/jquery.rateyo.min.css" type="text/css" /> |
| <link rel="stylesheet" href="../_static/css/selection-sharer.css" type="text/css" /> |
| |
| <script type="text/javascript"> |
| var DOCUMENTATION_OPTIONS = { |
| URL_ROOT: '../', |
| VERSION: '1.0', |
| COLLAPSE_INDEX: false, |
| FILE_SUFFIX: '.html', |
| HAS_SOURCE: true |
| }; |
| </script> |
| <script type="text/javascript" src="../_static/jquery.js"></script> |
| <script type="text/javascript" src="../_static/underscore.js"></script> |
| <script type="text/javascript" src="../_static/doctools.js"></script> |
| <script type="text/javascript" src="../_static/bootstrap-3.1.0/js/bootstrap.min.js"></script> |
| <script type="text/javascript" src="../_static/js/bootstrap-docbird.js"></script> |
| <script type="text/javascript" src="../_static/js/jquery-1.11.0.min.js"></script> |
| <script type="text/javascript" src="../_static/js/jquery-fix.js"></script> |
| <script type="text/javascript" src="../_static/js/featherlight.min.js"></script> |
| <script type="text/javascript" src="../_static/js/ifvisible.js"></script> |
| <script type="text/javascript" src="../_static/js/timeme.js"></script> |
| <script type="text/javascript" src="../_static/js/jquery.rateyo.min.js"></script> |
| <script type="text/javascript" src="../_static/js/js.cookie.js"></script> |
| <link rel="shortcut icon" href="../_static/docbird.ico"/> |
| <link rel="top" title="DistributedLog 1.0 documentation" href="../index.html" /> |
| <link rel="up" title="Configuration" href="main.html" /> |
| <link rel="next" title="Write Proxy Configuration" href="proxy.html" /> |
| <link rel="prev" title="Configuration" href="main.html" /> |
| <meta charset='utf-8'> |
| <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'> |
| <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'> |
| <meta name="apple-mobile-web-app-capable" content="yes"> |
| |
| <meta property="docbird:project" content="DistributedLog" /> |
| |
| </head> |
| <body> |
| <div class="navbar navbar-default navbar-fixed-top" role="navigation"> |
| <div class="container-fluid"> |
| <div class="row db-header"> |
| <div class="col-sm-3 col-md-3 col-lg-3 hidden-xs db-header-controls"> |
| <a href="/" alt="Back to Docbird"> |
| <div class="db-home-button"> |
| <span class="glyphicon glyphicon-home"></span> |
| </div> |
| </a> |
| |
| <form action="../search.html" method="get" class="db-searchbox-form"> |
| <div class="form-group"> |
| <input type="text" name="q" class="form-control db-searchbox-input" placeholder="Search DistributedLog" /> |
| </div> |
| <input type="hidden" name="check_keywords" value="yes" /> |
| <input type="hidden" name="area" value="default" /> |
| </form> |
| |
| </div> |
| <div class="col-sm-7 col-md-7 col-lg-7 col-xs-12 db-header-info"> |
| <div class="visible-xs"> |
| <a href="/" alt="Back to Docbird"> |
| <div class="db-home-button"> |
| <span class="glyphicon glyphicon-home"></span> |
| </div> |
| </a> |
| </div> |
| <div class="visible-xs db-xs-menu-button"> |
| <div class="navbar-header"> |
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#db-xs-menu"> |
| <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> |
| <div class="db-header-projectname"> |
| <h1><a href="../index.html">DistributedLog</a></h1> |
| </div> |
| </div> |
| </div> |
| <div class="row db-xs-menu hidden-sm hidden-md hidden-lg |
| collapse" id="db-xs-menu"> |
| |
| <form action="../search.html" method="get" class="db-searchbox-form"> |
| <div class="form-group"> |
| <input type="text" name="q" class="form-control db-searchbox-input" placeholder="Search DistributedLog" /> |
| </div> |
| <input type="hidden" name="check_keywords" value="yes" /> |
| <input type="hidden" name="area" value="default" /> |
| </form> |
| |
| <div class="db-toc" role="complementary"> |
| <ul class="current"> |
| <li class="toctree-l1"><a class="reference internal" href="../download.html">Releases</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../download.html#rc1">0.3.51-RC1</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../download.html#rc0">0.3.51-RC0</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../basics/main.html">Getting Started</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../basics/introduction.html">Introduction</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../basics/quickstart.html">Quick Start</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../api/main.html">API</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../api/core.html">Core Library API</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../api/proxy.html">Write Proxy Client API</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../api/practice.html">Best Practices</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1 current"><a class="reference internal" href="main.html">Configuration</a><ul class="current"> |
| <li class="toctree-l2 current"><a class="current reference internal" href="">Core Library Configuration</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="proxy.html">Write Proxy Configuration</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="client.html">Client Configuration</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="perlog.html">Per Stream Configuration</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../considerations/main.html">Considerations</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../considerations/main.html#consistency-durability-and-ordering">Consistency, Durability and Ordering</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../considerations/main.html#partitioning">Partitioning</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../considerations/main.html#processing-semantics">Processing Semantics</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../architecture/main.html">Architecture</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../architecture/main.html#data-model">Data Model</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../architecture/main.html#software-stack">Software Stack</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../architecture/main.html#lifecyle-of-records">Lifecyle of records</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../design/main.html">Detail Design</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../design/main.html#consistency">Consistency</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../design/main.html#streaming-reads">Streaming Reads</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../design/main.html#logsegment-lifecycle">LogSegment Lifecycle</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../globalreplicatedlog/main.html">Global Replicated Log</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../globalreplicatedlog/main.html#region-aware-data-placement-policy">Region Aware Data Placement Policy</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../globalreplicatedlog/main.html#cross-region-speculative-reads">Cross Region Speculative Reads</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../implementation/main.html">Implementation</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../implementation/storage.html">Storage</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../operations/main.html">Deployment & Administration</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/deployment.html">Cluster Setup & Deployment</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/operations.html">DistributedLog Operations</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/performance.html">Performance Tuning</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/hardware.html">Hardware</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/monitoring.html">Monitoring</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/zookeeper.html">ZooKeeper</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/bookkeeper.html">BookKeeper</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../performance/main.html">Performance</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../references/main.html">References</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../references/configuration.html">Configuration Settings</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../references/metrics.html">Metrics</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../references/features.html">Features</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../tutorials/main.html">Tutorials</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../tutorials/main.html#basic">Basic</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../tutorials/main.html#messaging">Messaging</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../tutorials/main.html#replicated-state-machines">Replicated State Machines</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../tutorials/main.html#analytics">Analytics</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../developer/main.html">Developer</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../developer/release.html">Release</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../faq.html">FAQ</a></li> |
| </ul> |
| |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="container"> |
| <div class="row"> |
| <div style="z-index: 1" class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> |
| <style> |
| .overflow-container { |
| display: none; |
| } |
| .overflow-toggle { |
| text-decoration: none; |
| border-bottom: none; |
| border-radius: 4px; |
| border: 1px solid #eee; |
| padding: 1px 3px 3px; |
| color: #888; |
| font-weight: normal; |
| background-color: linen; |
| line-height: 1.85em; |
| cursor: pointer; |
| } |
| .overflow-toggle:hover { |
| color: #333; |
| border-color: #ccc; |
| background-color: beige; |
| } |
| </style> |
| <script> |
| $(function(){ |
| $('.overflow-toggle').on('click', function(){ |
| $(this).next().toggle(); |
| }); |
| }); |
| </script> |
| <div class="db-project-header-container"> |
| <div class="row"> |
| |
| <div class="db-project-info col-lg-12 col-md-12 col-sm-12 col-xs-12"> |
| <h1> |
| <a href="../index.html">DistributedLog</a> |
| |
| </h1> |
| |
| <div class="db-code-link"> |
| <a href="git@github.com:twitter/distributedlog.git/tree/master/" target="_blank">git@github.com:twitter/distributedlog.git/tree/master/</a> |
| </div> |
| |
| |
| </div> |
| </div> |
| |
| <div class="row db-project-links-row"> |
| <div class=" col-sm-3 col-md-3 col-lg-3 db-project-link-column"> |
| <div class="db-hashtag-container"> |
| |
| <span class="db-project-link-label">OWNERS</span> |
| |
| <em>None</em> |
| |
| |
| </div> |
| </div> |
| <div class="col-sm-3 col-md-3 col-lg-3 db-project-link-column"> |
| <div class="db-hashtag-container"> |
| |
| <span class="db-project-link-label">TAGS</span> |
| |
| <em><a class="db-hashtag" href="/?q=tags:%23uses_maven">#uses_maven</a></em> |
| |
| |
| </div> |
| </div> |
| <div class="col-sm-3 col-md-3 col-lg-3 db-project-link-column"> |
| <span class="db-project-link-label">HEALTH</span> |
| |
| <h3 style="margin-top: 0"> |
| <!-- <a href="/techdocs/checklist.html" class="label label-success">--> |
| <a href="/report/distributedlog" class=""> |
| 9.0 / 10 |
| <span style="margin-left: .25em" class="glyphicon glyphicon-ok"></span> |
| </a> |
| |
| </h3> |
| </div> |
| <div class="col-sm-3 col-md-3 col-lg-3 db-project-link-column"> |
| <span class="db-project-link-label">RATING</span> |
| <div id="rateYo"></div> |
| </div> |
| </div> |
| |
| </div> |
| </div> |
| <div class="col-xs-12 col-sm-8 col-md-8 col-lg-8"> |
| <div class="db-content-body"> |
| |
| <div class="section" id="core-library-configuration"> |
| <h1>Core Library Configuration<a class="headerlink" href="#core-library-configuration" title="Permalink to this headline">¶</a></h1> |
| <p>This section describes the configuration settings used by DistributedLog Core Library.</p> |
| <p>All the core library settings are managed in <cite>DistributedLogConfiguration</cite>, which is |
| basically a properties based configuration, which extends from Apache commons |
| <cite>CompositeConfiguration</cite>. All the DL settings are in camel case and prefixed with a |
| meaningful component name. For example, <cite>zkSessionTimeoutSeconds</cite> means the session timeout |
| for component <cite>zk</cite> in seconds.</p> |
| <p>The default distributedlog configuration is constructed by instantiating an instance |
| of <cite>DistributedLogConfiguration</cite>. This distributedlog configuration will automatically load |
| the settings that specified via <cite>SystemConfiguration</cite>.</p> |
| <div class="highlight-python"><pre>DistributedLogConfiguration conf = new DistributedLogConfiguration();</pre> |
| <div style='display:none;' class='raw-code'><pre>DistributedLogConfiguration conf = new DistributedLogConfiguration();</pre> |
| </div></div> |
| <p>The recommended way is to load configuration from URL that points to a configuration file |
| (<cite>#loadConf(URL)</cite>).</p> |
| <div class="highlight-python"><pre>String configFile = "/path/to/distributedlog/conf/file"; |
| DistributedLogConfiguration conf = new DistributedLogConfiguration(); |
| conf.loadConf(new File(configFile).toURI().toURL());</pre> |
| <div style='display:none;' class='raw-code'><pre>String configFile = "/path/to/distributedlog/conf/file"; |
| DistributedLogConfiguration conf = new DistributedLogConfiguration(); |
| conf.loadConf(new File(configFile).toURI().toURL());</pre> |
| </div></div> |
| <div class="section" id="zookeeper-settings"> |
| <h2>ZooKeeper Settings<a class="headerlink" href="#zookeeper-settings" title="Permalink to this headline">¶</a></h2> |
| <p>A distributedlog namespace usually creates two zookeeper client instances: one is used |
| for DL metadata operations, while the other one is used by bookkeeper. All the zookeeper |
| clients are <em>retryable</em> clients, which they would reconnect when session is expired.</p> |
| <div class="section" id="dl-zookeeper-settings"> |
| <h3>DL ZooKeeper Settings<a class="headerlink" href="#dl-zookeeper-settings" title="Permalink to this headline">¶</a></h3> |
| <ul class="simple"> |
| <li><em>zkSessionTimeoutSeconds</em>: ZooKeeper session timeout, in seconds. Default is 30 seconds.</li> |
| <li><em>zkNumRetries</em>: Number of retries of each zookeeper request could attempt on retryable exceptions. |
| Default is 3.</li> |
| <li><em>zkRetryStartBackoffMillis</em>: The initial backoff time of first retry of each zookeeper request, in milliseconds. |
| Default is 5000.</li> |
| <li><em>zkRetryMaxBackoffMillis</em>: The max backoff time of retries of each zookeeper request, in milliseconds. |
| Default is 30000.</li> |
| <li><em>zkcNumRetryThreads</em>: The number of retry threads used by this zookeeper client. Default is 1.</li> |
| <li><em>zkRequestRateLimit</em>: The rate limiter is basically a guava <cite>RateLimiter</cite>. It is rate limiting the |
| requests that sent by zookeeper client per second. If the value is non-positive, the rate limiting |
| is disable. Default is 0.</li> |
| <li><em>zkAclId</em>: The digest id used for zookeeper ACL. If it is null, ACL is disabled. Default is null.</li> |
| </ul> |
| </div> |
| <div class="section" id="bk-zookeeper-settings"> |
| <h3>BK ZooKeeper Settings<a class="headerlink" href="#bk-zookeeper-settings" title="Permalink to this headline">¶</a></h3> |
| <ul class="simple"> |
| <li><em>bkcZKSessionTimeoutSeconds</em>: ZooKeeper session timeout, in seconds. Default is 30 seconds.</li> |
| <li><em>bkcZKNumRetries</em>: Number of retries of each zookeeper request could attempt on retryable exceptions. |
| Default is 3.</li> |
| <li><em>bkcZKRetryStartBackoffMillis</em>: The initial backoff time of first retry of each zookeeper request, in milliseconds. |
| Default is 5000.</li> |
| <li><em>bkcZKRetryMaxBackoffMillis</em>: The max backoff time of retries of each zookeeper request, in milliseconds. |
| Default is 30000.</li> |
| <li><em>bkcZKRequestRateLimit</em>: The rate limiter is basically a guava <cite>RateLimiter</cite>. It is rate limiting the |
| requests that sent by zookeeper client per second. If the value is non-positive, the rate limiting |
| is disable. Default is 0.</li> |
| </ul> |
| <p>There are a few rules to follow when optimizing the zookeeper settings:</p> |
| <ol class="arabic simple"> |
| <li>In general, higher session timeout is much better than lower timeout, which will make zookeeper client |
| more resilent to any network glitches.</li> |
| <li>A lower backoff time is better for latency, as it would trigger fast retries. But it |
| could trigger retry storm if the backoff time is too low.</li> |
| <li>Number of retries should be tuned based on the backoff time settings and corresponding latency SLA budget.</li> |
| <li>BK and DL readers use zookeeper client for metadata accesses. It is recommended to have higher session timeout, |
| higher number of retries and proper backoff time.</li> |
| <li>DL writers also use zookeeper client for ownership tracking. It is required to act quickly on network glitches. |
| It is recommended to have low session timeout, low backoff time and proper number of retries.</li> |
| </ol> |
| </div> |
| </div> |
| <div class="section" id="bookkeeper-settings"> |
| <h2>BookKeeper Settings<a class="headerlink" href="#bookkeeper-settings" title="Permalink to this headline">¶</a></h2> |
| <p>All the bookkeeper client configuration settings could be loaded via <cite>DistributedLogConfiguration</cite>. All of them |
| are prefixed with <cite>bkc.</cite>. For example, <cite>bkc.zkTimeout</cite> in distributedlog configuration will be applied as |
| <cite>zkTimeout</cite> in bookkeeper client configuration.</p> |
| <div class="section" id="general-settings"> |
| <h3>General Settings<a class="headerlink" href="#general-settings" title="Permalink to this headline">¶</a></h3> |
| <ul class="simple"> |
| <li><em>bkcNumIOThreads</em>: The number of I/O threads used by netty in bookkeeper client. |
| The default value is <cite>numWorkerThreads</cite>.</li> |
| </ul> |
| </div> |
| <div class="section" id="timer-settings"> |
| <h3>Timer Settings<a class="headerlink" href="#timer-settings" title="Permalink to this headline">¶</a></h3> |
| <ul class="simple"> |
| <li><em>timerTickDuration</em>: The tick duration in milliseconds that used for timeout |
| timer in bookkeeper client. The default value is 100 milliseconds.</li> |
| <li><em>timerNumTicks</em>: The number of ticks that used for timeout timer in bookkeeper client. |
| The default value is 1024.</li> |
| </ul> |
| </div> |
| <div class="section" id="data-placement-settings"> |
| <h3>Data Placement Settings<a class="headerlink" href="#data-placement-settings" title="Permalink to this headline">¶</a></h3> |
| <p>A log segment is backed by a bookkeeper <cite>ledger</cite>. A ledger's data is stored in an ensemble |
| of bookies in a stripping way. Each entry will be added in a <cite>write-quorum</cite> size of bookies. |
| The add operation will complete once it receives responses from a <cite>ack-quorum</cite> size of bookies. |
| The stripping is done in a round-robin way in bookkeeper.</p> |
| <p>For example, we configure the ensemble-size to 5, write-quorum-size to 3, |
| and ack-quorum-size to 2. The data will be stored in following stripping way.</p> |
| <div class="highlight-python"><pre>| entry id | bk1 | bk2 | bk3 | bk4 | bk5 | |
| | 0 | x | x | x | | | |
| | 1 | | x | x | x | | |
| | 2 | | | x | x | x | |
| | 3 | x | | | x | x | |
| | 4 | x | x | | | x | |
| | 5 | x | x | x | | |</pre> |
| <div style='display:none;' class='raw-code'><pre>| entry id | bk1 | bk2 | bk3 | bk4 | bk5 | |
| | 0 | x | x | x | | | |
| | 1 | | x | x | x | | |
| | 2 | | | x | x | x | |
| | 3 | x | | | x | x | |
| | 4 | x | x | | | x | |
| | 5 | x | x | x | | |</pre> |
| </div></div> |
| <p>We don't recommend stripping within a log segment to increase bandwidth. We'd recommend using |
| multiple distributedlog streams to increase bandwidth in higher level of distributedlog. so |
| typically the ensemble size will be set to be the same value as <cite>write-quorum-size</cite>.</p> |
| <ul class="simple"> |
| <li><em>bkcEnsembleSize</em>: The ensemble size of the log segment. The default value is 3.</li> |
| <li><em>bkcWriteQuorumSize</em>: The write quorum size of the log segment. The default value is 3.</li> |
| <li><em>bkcAckQuorumSize</em>: The ack quorumm size of the log segment. The default value is 2.</li> |
| </ul> |
| <div class="section" id="dns-resolver-settings"> |
| <h4>DNS Resolver Settings<a class="headerlink" href="#dns-resolver-settings" title="Permalink to this headline">¶</a></h4> |
| <p>DistributedLog uses bookkeeper's <cite>rack-aware</cite> data placement policy on placing data across |
| bookkeeper nodes. The <cite>rack-aware</cite> data placement uses a DNS resolver to resolve a bookie |
| address into a network location and then use those locations to build the network topology.</p> |
| <p>There are two built-in DNS resolvers in DistributedLog:</p> |
| <ol class="arabic simple"> |
| <li><em>DNSResolverForRacks</em>: It resolves domain name like <cite>(region)-(rack)-xxx-xxx.*</cite> to |
| network location <cite>/(region)/(rack)</cite>. If resolution failed, it returns <cite>/default-region/default-rack</cite>.</li> |
| <li><em>DNSResolverForRows</em>: It resolves domain name like <cite>(region)-(row)xx-xxx-xxx.*</cite> to |
| network location <cite>/(region)/(row)</cite>. If resolution failed, it returns <cite>/default-region/default-row</cite>.</li> |
| </ol> |
| <p>The DNS resolver could be loaded by reflection via <cite>bkEnsemblePlacementDnsResolverClass</cite>.</p> |
| <p><cite>(region)</cite> could be overrided in a configured <cite>dnsResolverOverrides</cite>. For example, if the |
| host name is <cite>(regionA)-(row1)-xx-yyy</cite>, it would be resolved to <cite>/regionA/row1</cite> without any |
| overrides. If the specified overrides is <cite>(regionA)-(row1)-xx-yyy:regionB</cite>, |
| the resolved network location would be <cite>/regionB/row1</cite>. Allowing overriding region provides |
| the optimization hits to bookkeeper if two <cite>logical</cite> regions are in same or close locations.</p> |
| <ul class="simple"> |
| <li><em>bkEnsemblePlacementDnsResolverClass</em>: The DNS resolver class for bookkeeper rack-aware ensemble placement. |
| The default value is <cite>DNSResolverForRacks</cite>.</li> |
| <li><em>bkRowAwareEnsemblePlacement</em>: A flag indicates whether <cite>DNSResolverForRows</cite> should be used. |
| If enabled, <cite>DNSResolverForRows</cite> will be used for DNS resolution in rack-aware placement policy. |
| Otherwise, it would use the DNS resolver configured by <cite>bkEnsemblePlacementDnsResolverClass</cite>.</li> |
| <li><em>dnsResolverOverrides</em>: The mapping used to override the region mapping derived by the DNS resolver. |
| The value is a string of pairs of host-region mappings (<cite>host:region</cite>) separated by semicolon. |
| By default it is empty string.</li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="section" id="namespace-configuration-settings"> |
| <h2>Namespace Configuration Settings<a class="headerlink" href="#namespace-configuration-settings" title="Permalink to this headline">¶</a></h2> |
| <p>This section lists all the general settings used by <cite>DistributedLogNamespace</cite>.</p> |
| <div class="section" id="executor-settings"> |
| <h3>Executor Settings<a class="headerlink" href="#executor-settings" title="Permalink to this headline">¶</a></h3> |
| <ul class="simple"> |
| <li><em>numWorkerThreads</em>: The number of worker threads used by the namespace instance. |
| The default value is the number of available processors.</li> |
| <li><em>numReadAheadWorkerThreads</em>: The number of dedicated readahead worker treads used |
| by the namespace instance. If it is non-positive, it would share the same executor |
| for readahead. Otherwise, it would create a dedicated executor for readahead. |
| The default value is 0.</li> |
| <li><em>numLockStateThreads</em>: The number of lock state threads used by the namespace instance. |
| The default value is 1.</li> |
| <li><em>schedulerShutdownTimeoutMs</em>: The timeout value in milliseconds, for shutting down |
| schedulers in the namespace instance. The default value is 5000ms.</li> |
| <li><em>useDaemonThread</em>: The flag whether to use daemon thread for DL executor threads. |
| The default value is false.</li> |
| </ul> |
| </div> |
| <div class="section" id="metadata-settings"> |
| <h3>Metadata Settings<a class="headerlink" href="#metadata-settings" title="Permalink to this headline">¶</a></h3> |
| <p>The log segment metadata is serialized into a string of content with a version. The version in log segment |
| metadata allows us evolving changes to metadata. All the versions supported by distributedlog right now |
| are listed in the below table.</p> |
| <table border="1" class="docutils"> |
| <colgroup> |
| <col width="9%" /> |
| <col width="91%" /> |
| </colgroup> |
| <thead valign="bottom"> |
| <tr class="row-odd"><th class="head">version</th> |
| <th class="head">description</th> |
| </tr> |
| </thead> |
| <tbody valign="top"> |
| <tr class="row-even"><td>0</td> |
| <td>Invalid version number.</td> |
| </tr> |
| <tr class="row-odd"><td>1</td> |
| <td>Basic version number. |
| Inprogress: start tx id, ledger id, region id |
| Completed: start/end tx id, ledger id, region id, record count and completion time</td> |
| </tr> |
| <tr class="row-even"><td>2</td> |
| <td>Introduced LSSN (LogSegment Sequence Number)</td> |
| </tr> |
| <tr class="row-odd"><td>3</td> |
| <td>Introduced Partial Truncated and Truncated status. |
| A min active (entry_id, slot_id) pair is recorded in completed log segment |
| metadata.</td> |
| </tr> |
| <tr class="row-even"><td>4</td> |
| <td>Introduced Enveloped Entry Stucture. None & LZ4 compression codec introduced.</td> |
| </tr> |
| <tr class="row-odd"><td>5</td> |
| <td>Introduced Sequence Id.</td> |
| </tr> |
| </tbody> |
| </table> |
| <p>A general rule for log segment metadata upgrade is described as below. For example, we are upgrading |
| from version <em>X</em> to version <em>X+1</em>.</p> |
| <p>1. Upgrade the readers before upgrading writers. So the readers are able to recognize the log segments |
| of version <em>X+1</em>. |
| 2. Upgrade the writers with the new binary of version <em>X+1</em> only. Keep the configuration <cite>ledgerMetadataLayoutVersion</cite> |
| unchanged - still in version <em>X</em>. |
| 3. Once all the writers are running in same binary of version <em>X+1</em>. Update writers again with <cite>ledgerMetadataLayoutVersion</cite> |
| set to version <em>X+1</em>.</p> |
| <ul class="simple"> |
| <li><em>ledgerMetadataLayoutVersion</em>: The logsegment metadata layout version. The default value is 5. Apply for <cite>writers</cite> only.</li> |
| <li><em>ledgerMetadataSkipMinVersionCheck</em>: The flag indicates whether DL should enforce minimum log segment metadata vesion check. |
| If it is true, DL will skip the checking and read the log segment metadata if it could recognize. Otherwise, it would fail |
| the read if the log segment's metadata version is less than the version that DL supports. By default, it is disabled.</li> |
| <li><em>firstLogsegmentSequenceNumber</em>: The first log segment sequence number to start with for a stream. The default value is 1. |
| The setting is only applied for writers, and only when upgrading metadata from version <cite>1</cite> to version <cite>2</cite>. |
| In this upgrade, we need to update old log segments to add ledger sequence number, once the writers start generating |
| new log segments with new version starting from this <cite>firstLogSegmentSequenceNumber</cite>.</li> |
| <li><em>maxIdSanityCheck</em>: The flag indicates whether DL should do sanity check on transaction id. If it is enabled, DL will throw |
| <cite>TransactionIdOutOfOrderException</cite> when it received a smaller transaction id than current maximum transaction id. By default, |
| it is enabled.</li> |
| <li><em>encodeRegionIDInVersion</em>: The flag indicates whether DL should encode region id into log segment metadata. In a global replicated |
| log, the log segments can be created in different regions. The region id in log segment metadata would help figuring out what |
| region that a log segment is created. The region id in log segment metadata would help for monitoring and troubleshooting. |
| By default, it is disabled.</li> |
| </ul> |
| </div> |
| <div class="section" id="namespace-settings"> |
| <h3>Namespace Settings<a class="headerlink" href="#namespace-settings" title="Permalink to this headline">¶</a></h3> |
| <ul class="simple"> |
| <li><em>federatedNamespaceEnabled</em>: The flag indicates whether DL should use federated namespace. By default, it is disabled.</li> |
| <li><em>federatedMaxLogsPerSubnamespace</em>: The maximum number of log stream per sub namespace in a federated namespace. By default, it is 15000</li> |
| <li><em>federatedCheckExistenceWhenCacheMiss</em>: The flag indicates whether to check the existence of a log stream in zookeeper or not, |
| if querying the local cache of the federated namespace missed.</li> |
| </ul> |
| </div> |
| </div> |
| <div class="section" id="writer-configuration-settings"> |
| <h2>Writer Configuration Settings<a class="headerlink" href="#writer-configuration-settings" title="Permalink to this headline">¶</a></h2> |
| <div class="section" id="id1"> |
| <h3>General Settings<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3> |
| <ul class="simple"> |
| <li><em>createStreamIfNotExists</em>: The flag indicates whether to create a log stream if it doesn't exist. By default, it is true.</li> |
| <li><em>compressionType</em>: The compression type used when enveloping the output buffer. The available compression types are |
| <cite>none</cite> and <cite>lz4</cite>. By default, it is <cite>none</cite> - no compression.</li> |
| <li><em>failFastOnStreamNotReady</em>: The flag indicates whether to fail immediately if the stream is not ready rather than enqueueing |
| the request. A log stream is considered as <cite>not-ready</cite> when it is either initializing the log stream or rolling a new log |
| segment. If this is enabled, DL would fail the write request immediately when the stream isn't ready. Otherwise, it would |
| enqueue the request and wait for the stream become ready. Please consider turning it on for the use cases that could retry |
| writing to other log streams, which it would result in fast failure hence client could retry other streams immediately. |
| By default, it is disabled.</li> |
| <li><em>disableRollingOnLogSegmentError</em>: The flag to disable rolling log segment when encountered error. By default, it is true.</li> |
| </ul> |
| </div> |
| <div class="section" id="durability-settings"> |
| <h3>Durability Settings<a class="headerlink" href="#durability-settings" title="Permalink to this headline">¶</a></h3> |
| <ul class="simple"> |
| <li><em>isDurableWriteEnabled</em>: The flag indicates whether durable write is enabled. By default it is true.</li> |
| </ul> |
| </div> |
| <div class="section" id="transmit-settings"> |
| <h3>Transmit Settings<a class="headerlink" href="#transmit-settings" title="Permalink to this headline">¶</a></h3> |
| <p>DL writes the log records into a transmit buffer before writing to bookkeeper. The following settings control |
| the frequency of transmits and commits.</p> |
| <ul class="simple"> |
| <li><em>writerOutputBufferSize</em>: The output buffer size in bytes. Larger buffer size will result in higher compression ratio and |
| it would reduce the entries sent to bookkeeper, use the disk bandwidth more efficiently and improve throughput. |
| Set this setting to <cite>0</cite> will ask DL to transmit the data immediately, which it would achieve low latency.</li> |
| <li><em>periodicFlushFrequencyMilliSeconds</em>: The periodic flush frequency in milliseconds. If the setting is set to a positive value, |
| the data in transmit buffer will be flushed in every half of the provided interval. Otherwise, the periodical flush will be |
| disabled. For example, if this setting is set to <cite>10</cite> milliseconds, the data will be flushed (<cite>transmit</cite>) every 5 milliseconds.</li> |
| <li><em>enableImmediateFlush</em>: The flag to enable immediate flush a control record. It is a flag to control the period to make data |
| visible to the readers. If this settings is true, DL would flush a control record immediately after transmitting the user data |
| is completed. The default value is false.</li> |
| <li><em>minimumDelayBetweenImmediateFlushMilliSeconds</em>: The minimum delay between two immediate flushes, in milliseconds. This setting |
| only takes effects when immediate flush is enabled. It is designed to tolerant the bursty of traffic when immediate flush is enabled, |
| which prevents sending too many control records to the bookkeeper.</li> |
| </ul> |
| </div> |
| <div class="section" id="logsegment-retention-settings"> |
| <h3>LogSegment Retention Settings<a class="headerlink" href="#logsegment-retention-settings" title="Permalink to this headline">¶</a></h3> |
| <p>The following settings are related to log segment retention.</p> |
| <ul class="simple"> |
| <li><em>logSegmentRetentionHours</em>: The log segment retention period, in hours. In other words, how long should DL keep the log segment |
| once it is <cite>truncated</cite> (<cite>explicitTruncationByApp`==true) or `completed</cite> (<a href="#id2"><span class="problematic" id="id3">`</span></a>explicitTruncationByApp`==false).</li> |
| <li><em>explicitTruncationByApp</em>: The flag indicates that truncation is managed explicitly by the application. If this is set then time |
| based retention only clean the log segments which are marked as <cite>truncated</cite>. By default it is disabled.</li> |
| </ul> |
| </div> |
| <div class="section" id="logsegment-rolling-settings"> |
| <h3>LogSegment Rolling Settings<a class="headerlink" href="#logsegment-rolling-settings" title="Permalink to this headline">¶</a></h3> |
| <p>The following settings are related to log segment rolling.</p> |
| <ul class="simple"> |
| <li><em>logSegmentRollingMinutes</em>: The log segment rolling interval, in minutes. If the setting is set to a positive value, DL will roll |
| log segments based on time. Otherwise, it will roll log segment based on size (<cite>maxLogSegmentBytes</cite>). The default value is 2 hours.</li> |
| <li><em>maxLogSegmentBytes</em>: The maximum size of a log segment, in bytes. This setting only takes effects when time based rolling is disabled. |
| If it is enabled, DL will roll a new log segment when the current one reaches the provided threshold. The default value is 256MB.</li> |
| <li><em>logSegmentRollingConcurrency</em>: The concurrency of log segment rolling. If the value is positive, it means how many log segments |
| can be rolled at the same time. Otherwise, it is unlimited. The default value is 1.</li> |
| </ul> |
| </div> |
| <div class="section" id="logsegment-allocation-settings"> |
| <h3>LogSegment Allocation Settings<a class="headerlink" href="#logsegment-allocation-settings" title="Permalink to this headline">¶</a></h3> |
| <p>A bookkeeper ledger is allocated when a DL stream is rolling into a new log segment. To reduce the latency penalty on log segment rolling, |
| a ledger allocator could be used for pre-allocating the ledgers for DL streams. This section describes the settings related to ledger |
| allocation.</p> |
| <ul class="simple"> |
| <li><em>enableLedgerAllocatorPool</em>: The flag indicates whether to use ledger allocator pool or not. It is disabled by default. It is recommended |
| to enable on write proxy.</li> |
| <li><em>ledgerAllocatorPoolPath</em>: The path of the ledger allocator pool. The default value is ".allocation_pool". The allocator pool path has to |
| be prefixed with <cite>"."</cite>. A DL namespace is allowed to have multiple allocator pool, as they will be acted independently.</li> |
| <li><em>ledgerAllocatorPoolName</em>: The name of the ledger allocator pool. Default value is null. It is set by write proxy on startup.</li> |
| <li><em>ledgerAllocatorPoolCoreSize</em>: The number of ledger allocators in the pool. The default value is 20.</li> |
| </ul> |
| </div> |
| <div class="section" id="write-limit-settings"> |
| <h3>Write Limit Settings<a class="headerlink" href="#write-limit-settings" title="Permalink to this headline">¶</a></h3> |
| <p>This section describes the settings related to queue-based write limiting.</p> |
| <ul class="simple"> |
| <li><em>globalOutstandingWriteLimit</em>: The maximum number of outstanding writes. If this setting is set to a positive value, the global |
| write limiting is enabled - when the number of outstanding writes go above the threshold, the consequent requests will be rejected |
| with <cite>OverCapacity</cite> exceptions. Otherwise, it is disabled. The default value is 0.</li> |
| <li><em>perWriterOutstandingWriteLimit</em>: The maximum number of outstanding writes per writer. It is similar as <cite>globalOutstandingWriteLimit</cite> |
| but applied per writer instance. The default value is 0.</li> |
| <li><em>outstandingWriteLimitDarkmode</em>: The flag indicates whether the write limiting is running in darkmode or not. If it is running in |
| dark mode, the request is not rejected when it is over limit, but just record it in the stats. By default, it is in dark mode. It |
| is recommended to run in dark mode to understand the traffic pattern before enabling real write limiting.</li> |
| </ul> |
| </div> |
| <div class="section" id="lock-settings"> |
| <h3>Lock Settings<a class="headerlink" href="#lock-settings" title="Permalink to this headline">¶</a></h3> |
| <p>This section describes the settings related to distributed lock used by the writers.</p> |
| <ul class="simple"> |
| <li><em>lockTimeoutSeconds</em>: The lock timeout in seconds. The default value is 30. If it is 0 or negative, the caller will attempt claiming |
| the lock, if there is no owner, it would claim successfully, otherwise it would return immediately and throw exception to indicate |
| who is the current owner.</li> |
| </ul> |
| </div> |
| </div> |
| <div class="section" id="reader-configuration-settings"> |
| <h2>Reader Configuration Settings<a class="headerlink" href="#reader-configuration-settings" title="Permalink to this headline">¶</a></h2> |
| <div class="section" id="id4"> |
| <h3>General Settings<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3> |
| <ul class="simple"> |
| <li><em>readLACLongPollTimeout</em>: The long poll timeout for reading <cite>LastAddConfirmed</cite> requests, in milliseconds. |
| The default value is 1 second. It is typically recommended to tune approximately with the request arrival interval. Otherwise, it would |
| end up becoming unnecessary short polls.</li> |
| </ul> |
| </div> |
| <div class="section" id="readahead-settings"> |
| <h3>ReadAhead Settings<a class="headerlink" href="#readahead-settings" title="Permalink to this headline">¶</a></h3> |
| <p>This section describes the settings related to readahead in DL readers.</p> |
| <ul class="simple"> |
| <li><em>enableReadAhead</em>: Flag to enable read ahead in DL readers. It is enabled by default.</li> |
| <li><em>readAheadMaxRecords</em>: The maximum number of records that will be cached in readahead cache by the DL readers. The default value |
| is 10. A higher value will improve throughput but use more memory. It should be tuned properly to avoid jvm gc if the reader cannot |
| keep up with the writing rate.</li> |
| <li><em>readAheadBatchSize</em>: The maximum number of entries that readahead worker will read in one batch. The default value is 2. |
| Increase the value to increase the concurrency of reading entries from bookkeeper. It is recommended to tune to a proper value for |
| catching up readers, not to exhaust bookkeeper's bandwidth.</li> |
| <li><em>readAheadWaitTimeOnEndOfStream</em>: The wait time if the reader reaches end of stream and there isn't any new inprogress log segment, |
| in milliseconds. The default value is 10 seconds.</li> |
| <li><em>readAheadNoSuchLedgerExceptionOnReadLACErrorThresholdMillis</em>: If readahead worker keeps receiving <cite>NoSuchLedgerExists</cite> exceptions |
| when reading <cite>LastAddConfirmed</cite> in the given period, it would stop long polling <cite>LastAddConfirmed</cite> and re-initialize the ledger handle |
| and retry. The threshold is in milliseconds. The default value is 10 seconds.</li> |
| </ul> |
| </div> |
| <div class="section" id="reader-constraint-settings"> |
| <h3>Reader Constraint Settings<a class="headerlink" href="#reader-constraint-settings" title="Permalink to this headline">¶</a></h3> |
| <p>This section describes the constraint settings in DL reader.</p> |
| <ul class="simple"> |
| <li><em>ignoreTruncationStatus</em>: The flag whether to ignore truncation status when reading the records. By default, it is false. |
| The readers will not attempt to read a log segment that is marked as <cite>Truncated</cite> if this setting is false. It can be enabled for |
| tooling and troubleshooting.</li> |
| <li><em>alertPositionOnTruncated</em>: The flag whether we should alert when reader is positioned on a truncated segment. By default, it is true. |
| It would alert and fail the reader if it is positioned at a <cite>Truncated</cite> log segment when the setting is true. It can be disabled for |
| tooling and troubleshooting.</li> |
| <li><em>positionGapDetectionEnabled</em>: The flag whether to enable position gap detection or not. This is a very strict constraint on reader, |
| to prevent readers miss reading records due to any software bugs. It is enabled by default.</li> |
| </ul> |
| </div> |
| <div class="section" id="idle-reader-settings"> |
| <h3>Idle Reader Settings<a class="headerlink" href="#idle-reader-settings" title="Permalink to this headline">¶</a></h3> |
| <p>There is a mechanism to detect idleness of readers, to prevent reader becoming stall due to any bugs.</p> |
| <ul class="simple"> |
| <li><em>readerIdleWarnThresholdMillis</em>: The warning threshold of the time that a reader becomes idle, in milliseconds. If a reader becomes |
| idle more than the threshold, it would dump warnings in the log. The default value is 2 minutes.</li> |
| <li><em>readerIdleErrorThresholdMillis</em>: The error threshold of the time that a reader becomes idle, in milliseconds. If a reader becomes |
| idle more than the threshold, it would throw <cite>IdleReader</cite> exceptions to notify applications. The default value is <cite>Integer.MAX_VALUE</cite>.</li> |
| </ul> |
| </div> |
| <div class="section" id="scan-settings"> |
| <h3>Scan Settings<a class="headerlink" href="#scan-settings" title="Permalink to this headline">¶</a></h3> |
| <ul class="simple"> |
| <li><em>firstNumEntriesEachPerLastRecordScan</em>: Number of entries to scan for first scan of reading last record. The default value is 2.</li> |
| <li><em>maxNumEntriesPerReadLastRecordScan</em>: Maximum number of entries for each scan to read last record. The default value is 16.</li> |
| </ul> |
| </div> |
| </div> |
| <div class="section" id="tracing-stats-settings"> |
| <h2>Tracing/Stats Settings<a class="headerlink" href="#tracing-stats-settings" title="Permalink to this headline">¶</a></h2> |
| <p>This section describes the settings related to tracing and stats.</p> |
| <ul class="simple"> |
| <li><em>traceReadAheadDeliveryLatency</em>: Flag to enable tracing read ahead delivery latency. By default it is disabled.</li> |
| <li><em>metadataLatencyWarnThresholdMs</em>: The warn threshold of metadata access latency, in milliseconds. If a metadata operation takes |
| more than the threshold, it would be logged. By default it is 1 second.</li> |
| <li><em>dataLatencyWarnThresholdMs</em>: The warn threshold for data access latency, in milliseconds. If a data operation takes |
| more than the threshold, it would be logged. By default it is 2 seconds.</li> |
| <li><em>traceReadAheadMetadataChanges</em>: Flag to enable tracing the major metadata changes in readahead. If it is enabled, it will log |
| the readahead metadata changes with precise timestamp, which is helpful for troubleshooting latency related issues. By default it |
| is disabled.</li> |
| <li><em>enableTaskExecutionStats</em>: Flag to trace long running tasks and record task execution stats in the thread pools. It is disabled |
| by default.</li> |
| <li><em>taskExecutionWarnTimeMicros</em>: The warn threshold for the task execution time, in micros. The default value is 100,000.</li> |
| <li><em>enablePerStreamStat</em>: Flag to enable per stream stat. By default, it is disabled.</li> |
| </ul> |
| </div> |
| <div class="section" id="feature-provider-settings"> |
| <h2>Feature Provider Settings<a class="headerlink" href="#feature-provider-settings" title="Permalink to this headline">¶</a></h2> |
| <ul class="simple"> |
| <li><em>featureProviderClass</em>: The feature provider class. The default value is <cite>DefaultFeatureProvider</cite>, which disable all the features |
| by default.</li> |
| </ul> |
| </div> |
| </div> |
| |
| |
| </div> |
| </div> |
| <div class="hidden-xs col-sm-3 col-md-3 col-md-offset-1 col-lg-3 db-sidebar"> |
| |
| <div class="db-toc" role="complementary"> |
| <ul class="current"> |
| <li class="toctree-l0 current"><a class="current reference internal" href="../index.html">DistributedLog</a></li> |
| </ul> |
| <ul class="current"> |
| <li class="toctree-l1"><a class="reference internal" href="../download.html">Releases</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../download.html#rc1">0.3.51-RC1</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../download.html#rc0">0.3.51-RC0</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../basics/main.html">Getting Started</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../basics/introduction.html">Introduction</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../basics/quickstart.html">Quick Start</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../api/main.html">API</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../api/core.html">Core Library API</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../api/proxy.html">Write Proxy Client API</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../api/practice.html">Best Practices</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1 current"><a class="reference internal" href="main.html">Configuration</a><ul class="current"> |
| <li class="toctree-l2 current"><a class="current reference internal" href="">Core Library Configuration</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="proxy.html">Write Proxy Configuration</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="client.html">Client Configuration</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="perlog.html">Per Stream Configuration</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../considerations/main.html">Considerations</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../considerations/main.html#consistency-durability-and-ordering">Consistency, Durability and Ordering</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../considerations/main.html#partitioning">Partitioning</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../considerations/main.html#processing-semantics">Processing Semantics</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../architecture/main.html">Architecture</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../architecture/main.html#data-model">Data Model</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../architecture/main.html#software-stack">Software Stack</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../architecture/main.html#lifecyle-of-records">Lifecyle of records</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../design/main.html">Detail Design</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../design/main.html#consistency">Consistency</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../design/main.html#streaming-reads">Streaming Reads</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../design/main.html#logsegment-lifecycle">LogSegment Lifecycle</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../globalreplicatedlog/main.html">Global Replicated Log</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../globalreplicatedlog/main.html#region-aware-data-placement-policy">Region Aware Data Placement Policy</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../globalreplicatedlog/main.html#cross-region-speculative-reads">Cross Region Speculative Reads</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../implementation/main.html">Implementation</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../implementation/storage.html">Storage</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../operations/main.html">Deployment & Administration</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/deployment.html">Cluster Setup & Deployment</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/operations.html">DistributedLog Operations</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/performance.html">Performance Tuning</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/hardware.html">Hardware</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/monitoring.html">Monitoring</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/zookeeper.html">ZooKeeper</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../operations/bookkeeper.html">BookKeeper</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../performance/main.html">Performance</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../references/main.html">References</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../references/configuration.html">Configuration Settings</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../references/metrics.html">Metrics</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../references/features.html">Features</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../tutorials/main.html">Tutorials</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../tutorials/main.html#basic">Basic</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../tutorials/main.html#messaging">Messaging</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../tutorials/main.html#replicated-state-machines">Replicated State Machines</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../tutorials/main.html#analytics">Analytics</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../developer/main.html">Developer</a><ul> |
| <li class="toctree-l2"><a class="reference internal" href="../developer/release.html">Release</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../faq.html">FAQ</a></li> |
| </ul> |
| |
| <span id="last"></span> |
| </div> |
| |
| </div> |
| <!-- <div id="slidebox"> --> |
| <!-- <button id="slidebox_close" type="button" class="close">×</button> --> |
| <!-- <p>Rate This Page</p> --> |
| <!-- <div id="rateYo"></div> --> |
| <!-- <p>Comment</p> |
| <input type="text" name="comment"></input> |
| <button>Submit</button> --> |
| <!-- </div> --> |
| </div> |
| </div> |
| <footer class="footer"> |
| <div class="container-fluid"> |
| <div class="row"> |
| <div class="col-md-10 col-md-offset-1"> |
| <p class="pull-right"> |
| <a href="#">Back to top</a> |
| |
| <br/> |
| |
| <div id="sourcelink"> |
| <a href="git@github.com:twitter/distributedlog.git/tree/master/docs/configuration/core.rst" |
| rel="nofollow">Source</a> |
| |
| <a href="../_sources/configuration/core.txt" |
| rel="nofollow">Raw</a> |
| <a href="../__docbird-build.log" |
| rel="nofollow">Build Log</a> |
| <a href="/report/stats/distributedlog:distributedlog" |
| rel="nofollow">Stats</a> |
| </div> |
| </p> |
| <p> |
| Built and hosted by <a href="/">DocBird</a>. |
| </p> |
| </div> |
| </div> |
| </div> |
| </footer> |
| <script type="text/javascript" src="../_static/js/docbird.js"></script> |
| <script type="text/javascript"> |
| var _gaq = _gaq || []; |
| _gaq.push(['_setAccount', 'UA-30775-8']); |
| _gaq.push(['_trackPageview']); |
| |
| (function() { |
| var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; |
| ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; |
| var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); |
| })(); |
| </script> |
| <!-- <script type="text/javascript" src="//s/d41d8cd98f00b204e9800998ecf8427e/en_US-tbnx1s-1988229788/6163/97/1.4.3/_/download/batch/com.atlassian.jira.collector.plugin.jira-issue-collector-plugin:issuecollector/com.atlassian.jira.collector.plugin.jira-issue-collector-plugin:issuecollector.js?collectorId=e62237fc"></script> |
| --> |
| |
| <script type="text/javascript"> |
| $(document).ready(function () { |
| // track user activity time (from https://github.com/jasonzissman/TimeMe.js) |
| TimeMe.setIdleDurationInSeconds(30); |
| TimeMe.setCurrentPageName("my-home-page"); |
| TimeMe.initialize(); |
| |
| // record page visit event when user leaves the page |
| window.onbeforeunload = function (event) { |
| xmlhttp=new XMLHttpRequest(); |
| xmlhttp.withCredentials = true; |
| xmlhttp.open("POST", "/event/distributedlog:distributedlog/visit", false); |
| xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); |
| var event_data = { |
| total_time_reading: TimeMe.getTimeOnCurrentPageInSeconds(), |
| page: window.location.href |
| }; |
| //alert("send: " + $.param(event_data)); |
| xmlhttp.send($.param(event_data)); |
| }; |
| |
| // ask user for page rating after 20 seconds |
| // setTimeout(function(){ |
| // alert("Rate this page!"); |
| // }, 20000); |
| }); |
| </script> |
| <!-- <style> |
| #slidebox{ |
| width: 250px; |
| height: 90px; |
| padding: 10px; |
| background-color: #fff; |
| border: 1px solid #ccc; |
| position: fixed; |
| bottom: 3px; |
| right: -280px; |
| z-index: 1; |
| } |
| #slidebox .close{ |
| margin-top: -5px; |
| opacity: 0.5; |
| } |
| #slidebox .close:hover{ |
| opacity: 0.7; |
| } |
| </style> --> |
| <script type="text/javascript"> |
| $(function() { |
| // $(window).scroll(function(){ |
| // var distanceTop = $('#last').offset().top - $(window).height(); |
| |
| // if ($(window).scrollTop() > distanceTop) |
| // $('#slidebox').animate({'right':'3px'},300); |
| // else |
| // $('#slidebox').stop(true).animate({'right':'-280px'},100); |
| // }); |
| |
| // $('#slidebox .close').bind('click',function(){ |
| // $(this).parent().remove(); |
| // }); |
| |
| $("#rateYo").rateYo({ |
| normalFill: "#A0A0A0", |
| halfStar: true, |
| rating: (Cookies.get('docbird.rating.distributedlog.distributedlog') || 0.0) |
| }).on("rateyo.set", function (e, data) { |
| var event_data = { |
| comment: '', // see todo note below |
| rating: data.rating, |
| page: window.location.href |
| }; |
| Cookies.get('docbird.rating.distributedlog.distributedlog', data.rating) |
| $.post('/event/distributedlog:distributedlog/rating', event_data) |
| // xmlhttp=new XMLHttpRequest(); |
| // xmlhttp.withCredentials = true; |
| // var event_data = { |
| // comment: '', // see todo note below |
| // rating: data.rating, |
| // page: window.location.href |
| // }; |
| // xmlhttp.open("GET", "/event/distributedlog/rating?" + $.param(event_data), false); |
| // xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); |
| // // todo: implement comment form in rating slide out, |
| // // and instead of hooking this event, include a submit button, |
| // // and read the rating with rating() method |
| |
| // // alert("send: " + $.param(event_data)); |
| // xmlhttp.send(); |
| |
| }); |
| |
| }); |
| </script> |
| <script src="_static/js/selection-sharer.js"></script> |
| <script> |
| $('.db-content-body').selectionSharer(); |
| </script> |
| </body> |
| </html> |