blob: eb6c30cc2ec9e5601bc8ce78b5440076fa7859e2 [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>API - Write Records to Multiple Streams</title>
<meta name="description" content="Apache DistributedLog is an high performance replicated log.
">
<link rel="stylesheet" href="/docs/0.4.0-incubating/styles/site.css">
<link rel="stylesheet" href="/docs/0.4.0-incubating/css/theme.css">
<!-- JQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="/docs/0.4.0-incubating/js/bootstrap.min.js"></script>
<link rel="canonical" href="http://bookkeeper.apache.org/distributedlog/docs/0.4.0-incubating/tutorials/basic-3.html" data-proofer-ignore>
<link rel="alternate" type="application/rss+xml" title="Apache DistributedLog (incubating)" href="http://bookkeeper.apache.org/distributedlog/docs/0.4.0-incubating/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/0.4.0-incubating/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/0.4.0-incubating/">V0.4.0</a></li>
<!-- Concepts -->
<li><a href="/docs/0.4.0-incubating/basics/introduction">Concepts</a></li>
<!-- Quick Start -->
<li>
<a href="/docs/0.4.0-incubating/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/0.4.0-incubating/start/building.html">
Build DistributedLog from Source
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/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/0.4.0-incubating/start/quickstart.html">
Setup & Run Example
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/tutorials/basic-1.html">
API - Write Records (via core library)
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/tutorials/basic-2.html">
API - Write Records (via write proxy)
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/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/0.4.0-incubating/deployment/cluster.html">
Cluster Setup
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/deployment/global-cluster.html">
Global Cluster Setup
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/deployment/docker.html">
Docker
</a>
</li>
</ul>
</li>
<!-- API -->
<li>
<a href="/docs/0.4.0-incubating/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/0.4.0-incubating/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/0.4.0-incubating/basics/introduction.html">
Introduction
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/user_guide/considerations/main.html">
Considerations
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/user_guide/architecture/main.html">
Architecture
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/user_guide/api/main.html">
API
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/user_guide/configuration/main.html">
Configuration
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/user_guide/design/main.html">
Detail Design
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/user_guide/globalreplicatedlog/main.html">
Global Replicated Log
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/user_guide/implementation/main.html">
Implementation
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/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/0.4.0-incubating/deployment/cluster">Cluster Setup</a></li>
<li>
<a href="/docs/0.4.0-incubating/admin_guide/operations.html">
Operations
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/admin_guide/loadtest.html">
Load Test
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/admin_guide/performance.html">
Performance Tuning
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/admin_guide/hardware.html">
Hardware
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/admin_guide/monitoring.html">
Monitoring
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/admin_guide/zookeeper.html">
ZooKeeper
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/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/0.4.0-incubating/tutorials/basic-1">Write Records (via Core Library)</a></li>
<li><a href="/docs/0.4.0-incubating/tutorials/basic-2">Write Records (via Write Proxy)</a></li>
<li><a href="/docs/0.4.0-incubating/tutorials/basic-3">Write Records to multiple streams</a></li>
<li><a href="/docs/0.4.0-incubating/tutorials/basic-4">Atomic Write Records</a></li>
<li><a href="/docs/0.4.0-incubating/tutorials/basic-5">Tailing Read Records</a></li>
<li><a href="/docs/0.4.0-incubating/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/0.4.0-incubating/tutorials/messaging-1.html">
Write records to partitioned streams
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/tutorials/messaging-2.html">
Write records to multiple streams (load balancer)
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/tutorials/messaging-3.html">
At-least-once Processing
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/tutorials/messaging-4.html">
Exact-Once Processing
</a>
</li>
<li>
<a href="/docs/0.4.0-incubating/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/0.4.0-incubating/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/0.4.0-incubating/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="col-md-8 col-md-offset-2">
<div class="contents topic" id="basic-tutorial-write-records-to-multiple-streams">
<p class="topic-title first">Basic Tutorial - Write Records to Multiple Streams</p>
<ul class="auto-toc simple">
<li><a class="reference internal" href="#write-records-to-multiple-streams" id="id1">1&nbsp;&nbsp;&nbsp;Write Records to Multiple Streams</a><ul class="auto-toc">
<li><a class="reference internal" href="#open-a-write-proxy-client" id="id2">1.1&nbsp;&nbsp;&nbsp;Open a write proxy client</a><ul class="auto-toc">
<li><a class="reference internal" href="#create-write-proxy-client-builder" id="id3">1.1.1&nbsp;&nbsp;&nbsp;Create write proxy client builder</a></li>
<li><a class="reference internal" href="#enable-thrift-mux" id="id4">1.1.2&nbsp;&nbsp;&nbsp;Enable thrift mux</a></li>
<li><a class="reference internal" href="#point-the-client-to-write-proxy-using-finagle-name" id="id5">1.1.3&nbsp;&nbsp;&nbsp;Point the client to write proxy using finagle name</a></li>
<li><a class="reference internal" href="#build-the-write-proxy-client" id="id6">1.1.4&nbsp;&nbsp;&nbsp;Build the write proxy client</a></li>
</ul>
</li>
<li><a class="reference internal" href="#create-a-multistreamwriter" id="id7">1.2&nbsp;&nbsp;&nbsp;Create a <cite>MultiStreamWriter</cite></a><ul class="auto-toc">
<li><a class="reference internal" href="#create-multi-stream-writer-builder" id="id8">1.2.1&nbsp;&nbsp;&nbsp;Create multi stream writer builder</a></li>
<li><a class="reference internal" href="#build-the-writer-to-write-a-set-of-streams" id="id9">1.2.2&nbsp;&nbsp;&nbsp;Build the writer to write a set of streams</a></li>
<li><a class="reference internal" href="#point-the-multi-stream-writer-to-use-write-proxy-client" id="id10">1.2.3&nbsp;&nbsp;&nbsp;Point the multi stream writer to use write proxy client</a></li>
<li><a class="reference internal" href="#configure-the-flush-policy-for-the-multi-stream-writer" id="id11">1.2.4&nbsp;&nbsp;&nbsp;Configure the flush policy for the multi stream writer</a></li>
<li><a class="reference internal" href="#configure-the-request-timeouts-and-retry-policy-for-the-multi-stream-writer" id="id12">1.2.5&nbsp;&nbsp;&nbsp;Configure the request timeouts and retry policy for the multi stream writer</a></li>
<li><a class="reference internal" href="#build-the-multi-writer" id="id13">1.2.6&nbsp;&nbsp;&nbsp;Build the multi writer</a></li>
</ul>
</li>
<li><a class="reference internal" href="#write-records" id="id14">1.3&nbsp;&nbsp;&nbsp;Write Records</a><ul class="auto-toc">
<li><a class="reference internal" href="#write-records-to-multi-streams" id="id15">1.3.1&nbsp;&nbsp;&nbsp;Write records to multi streams</a></li>
<li><a class="reference internal" href="#register-the-write-callback" id="id16">1.3.2&nbsp;&nbsp;&nbsp;Register the write callback</a></li>
</ul>
</li>
<li><a class="reference internal" href="#run-the-tutorial" id="id17">1.4&nbsp;&nbsp;&nbsp;Run the tutorial</a><ul class="auto-toc">
<li><a class="reference internal" href="#start-the-local-bookkeeper-cluster" id="id18">1.4.1&nbsp;&nbsp;&nbsp;Start the local bookkeeper cluster</a></li>
<li><a class="reference internal" href="#start-the-write-proxy" id="id19">1.4.2&nbsp;&nbsp;&nbsp;Start the write proxy</a></li>
<li><a class="reference internal" href="#create-multiple-streams" id="id20">1.4.3&nbsp;&nbsp;&nbsp;Create multiple streams</a></li>
<li><a class="reference internal" href="#tail-the-streams" id="id21">1.4.4&nbsp;&nbsp;&nbsp;Tail the streams</a></li>
<li><a class="reference internal" href="#write-the-records" id="id22">1.4.5&nbsp;&nbsp;&nbsp;Write the records</a></li>
<li><a class="reference internal" href="#check-the-results" id="id23">1.4.6&nbsp;&nbsp;&nbsp;Check the results</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="write-records-to-multiple-streams">
<h2><a class="toc-backref" href="#id1">1&nbsp;&nbsp;&nbsp;Write Records to Multiple Streams</a></h2>
<p>This tutorial shows how to write records using write proxy multi stream writer. The <cite>DistributedLogMultiStreamWriter</cite>
is a wrapper over <cite>DistributedLogClient</cite> on writing records to a set of streams in a <cite>round-robin</cite> way and ensure low write latency even on single stream ownership failover.</p>
<div class="section" id="open-a-write-proxy-client">
<h3><a class="toc-backref" href="#id2">1.1&nbsp;&nbsp;&nbsp;Open a write proxy client</a></h3>
<p>Before everything, you have to open a write proxy client to write records.
These are the steps to follow to <cite>open a write proxy client</cite>.</p>
<div class="section" id="create-write-proxy-client-builder">
<h4><a class="toc-backref" href="#id3">1.1.1&nbsp;&nbsp;&nbsp;Create write proxy client builder</a></h4>
<pre class="literal-block">
DistributedLogClientBuilder builder = DistributedLogClientBuilder.newBuilder()
.clientId(ClientId.apply(&quot;console-proxy-writer&quot;))
.name(&quot;console-proxy-writer&quot;);
</pre>
</div>
<div class="section" id="enable-thrift-mux">
<h4><a class="toc-backref" href="#id4">1.1.2&nbsp;&nbsp;&nbsp;Enable thrift mux</a></h4>
<pre class="literal-block">
builder = builder.thriftmux(true);
</pre>
</div>
<div class="section" id="point-the-client-to-write-proxy-using-finagle-name">
<h4><a class="toc-backref" href="#id5">1.1.3&nbsp;&nbsp;&nbsp;Point the client to write proxy using finagle name</a></h4>
<pre class="literal-block">
String finagleNameStr = &quot;inet!127.0.0.1:8000&quot;;
builder = builder.finagleNameStr(finagleNameStr);
</pre>
</div>
<div class="section" id="build-the-write-proxy-client">
<h4><a class="toc-backref" href="#id6">1.1.4&nbsp;&nbsp;&nbsp;Build the write proxy client</a></h4>
<pre class="literal-block">
DistributedLogClient client = builder.build();
</pre>
</div>
</div>
<div class="section" id="create-a-multistreamwriter">
<h3><a class="toc-backref" href="#id7">1.2&nbsp;&nbsp;&nbsp;Create a <cite>MultiStreamWriter</cite></a></h3>
<div class="section" id="create-multi-stream-writer-builder">
<h4><a class="toc-backref" href="#id8">1.2.1&nbsp;&nbsp;&nbsp;Create multi stream writer builder</a></h4>
<pre class="literal-block">
DistributedLogMultiStreamWriterBuilder builder = DistributedLogMultiStreamWriter.newBuilder();
</pre>
</div>
<div class="section" id="build-the-writer-to-write-a-set-of-streams">
<h4><a class="toc-backref" href="#id9">1.2.2&nbsp;&nbsp;&nbsp;Build the writer to write a set of streams</a></h4>
<pre class="literal-block">
List&lt;String&gt; streams = ...;
builder = builder.streams(streams);
</pre>
</div>
<div class="section" id="point-the-multi-stream-writer-to-use-write-proxy-client">
<h4><a class="toc-backref" href="#id10">1.2.3&nbsp;&nbsp;&nbsp;Point the multi stream writer to use write proxy client</a></h4>
<pre class="literal-block">
builder = builder.client(client);
</pre>
</div>
<div class="section" id="configure-the-flush-policy-for-the-multi-stream-writer">
<h4><a class="toc-backref" href="#id11">1.2.4&nbsp;&nbsp;&nbsp;Configure the flush policy for the multi stream writer</a></h4>
<pre class="literal-block">
// transmit immediately after a record is written.
builder = builder.bufferSize(0);
builder = builder.flushIntervalMs(0);
</pre>
</div>
<div class="section" id="configure-the-request-timeouts-and-retry-policy-for-the-multi-stream-writer">
<h4><a class="toc-backref" href="#id12">1.2.5&nbsp;&nbsp;&nbsp;Configure the request timeouts and retry policy for the multi stream writer</a></h4>
<pre class="literal-block">
// Configure the speculative timeouts - if writing to a stream cannot
// complete within the speculative timeout, it would try writing to
// another streams.
builder = builder.firstSpeculativeTimeoutMs(10000)
builder = builder.maxSpeculativeTimeoutMs(20000)
// Configure the request timeout.
builder = builder.requestTimeoutMs(50000);
</pre>
</div>
<div class="section" id="build-the-multi-writer">
<h4><a class="toc-backref" href="#id13">1.2.6&nbsp;&nbsp;&nbsp;Build the multi writer</a></h4>
<pre class="literal-block">
DistributedLogMultiStreamWriter writer = builder.build();
</pre>
</div>
</div>
<div class="section" id="write-records">
<h3><a class="toc-backref" href="#id14">1.3&nbsp;&nbsp;&nbsp;Write Records</a></h3>
<div class="section" id="write-records-to-multi-streams">
<h4><a class="toc-backref" href="#id15">1.3.1&nbsp;&nbsp;&nbsp;Write records to multi streams</a></h4>
<pre class="literal-block">
byte[] data = ...;
Future&lt;DLSN&gt; writeFuture = writer.write(ByteBuffer.wrap(data));
</pre>
</div>
<div class="section" id="register-the-write-callback">
<h4><a class="toc-backref" href="#id16">1.3.2&nbsp;&nbsp;&nbsp;Register the write callback</a></h4>
<p>Register a future listener on write completion.</p>
<pre class="literal-block">
writeFuture.addEventListener(new FutureEventListener&lt;DLSN&gt;() {
&#64;Override
public void onFailure(Throwable cause) {
// executed when write failed.
}
&#64;Override
public void onSuccess(DLSN value) {
// executed when write completed.
}
});
</pre>
</div>
</div>
<div class="section" id="run-the-tutorial">
<h3><a class="toc-backref" href="#id17">1.4&nbsp;&nbsp;&nbsp;Run the tutorial</a></h3>
<p>Run the example in the following steps:</p>
<div class="section" id="start-the-local-bookkeeper-cluster">
<h4><a class="toc-backref" href="#id18">1.4.1&nbsp;&nbsp;&nbsp;Start the local bookkeeper cluster</a></h4>
<p>You can use follow command to start the distributedlog stack locally.
After the distributedlog is started, you could access it using
distributedlog uri <em>distributedlog://127.0.0.1:7000/messaging/distributedlog</em>.</p>
<pre class="literal-block">
// dlog local ${zk-port}
./distributedlog-core/bin/dlog local 7000
</pre>
</div>
<div class="section" id="start-the-write-proxy">
<h4><a class="toc-backref" href="#id19">1.4.2&nbsp;&nbsp;&nbsp;Start the write proxy</a></h4>
<p>Start the write proxy, listening on port 8000.</p>
<pre class="literal-block">
// DistributedLogServerApp -p ${service-port} --shard-id ${shard-id} -sp ${stats-port} -u {distributedlog-uri} -mx -c ${conf-file}
./distributedlog-service/bin/dlog org.apache.distributedlog.service.DistributedLogServerApp -p 8000 --shard-id 1 -sp 8001 -u distributedlog://127.0.0.1:7000/messaging/distributedlog -mx -c ${distributedlog-repo}/distributedlog-service/conf/distributedlog_proxy.conf
</pre>
</div>
<div class="section" id="create-multiple-streams">
<h4><a class="toc-backref" href="#id20">1.4.3&nbsp;&nbsp;&nbsp;Create multiple streams</a></h4>
<p>Create multiple streams under the distributedlog uri.</p>
<pre class="literal-block">
// Create Stream `basic-stream-{3-7}`
// dlog tool create -u ${distributedlog-uri} -r ${stream-prefix} -e ${stream-regex}
./distributedlog-core/bin/dlog tool create -u distributedlog://127.0.0.1:7000/messaging/distributedlog -r basic-stream- -e 3-7
</pre>
</div>
<div class="section" id="tail-the-streams">
<h4><a class="toc-backref" href="#id21">1.4.4&nbsp;&nbsp;&nbsp;Tail the streams</a></h4>
<p>Tailing the streams using <cite>MultiReader</cite> to wait for new records.</p>
<pre class="literal-block">
// Tailing Stream `basic-stream-{3-7}`
// runner run org.apache.distributedlog.basic.MultiReader ${distributedlog-uri} ${stream}[,${stream}]
./distributedlog-tutorials/distributedlog-basic/bin/runner run org.apache.distributedlog.basic.MultiReader distributedlog://127.0.0.1:7000/messaging/distributedlog basic-stream-3,basic-stream-4,basic-stream-5,basic-stream-6,basic-stream-7
</pre>
</div>
<div class="section" id="write-the-records">
<h4><a class="toc-backref" href="#id22">1.4.5&nbsp;&nbsp;&nbsp;Write the records</a></h4>
<p>Run the example to write records to the multi streams in a console.</p>
<pre class="literal-block">
// Write Records into Stream `basic-stream-{3-7}`
// runner run org.apache.distributedlog.basic.ConsoleProxyMultiWriter ${distributedlog-uri} ${stream}[,${stream}]
./distributedlog-tutorials/distributedlog-basic/bin/runner run org.apache.distributedlog.basic.ConsoleProxyMultiWriter 'inet!127.0.0.1:8000' basic-stream-3,basic-stream-4,basic-stream-5,basic-stream-6,basic-stream-7
</pre>
</div>
<div class="section" id="check-the-results">
<h4><a class="toc-backref" href="#id23">1.4.6&nbsp;&nbsp;&nbsp;Check the results</a></h4>
<p>Example output from <cite>ConsoleProxyMultiWriter</cite> and <cite>MultiReader</cite>.</p>
<pre class="literal-block">
// Output of `ConsoleProxyWriter`
May 08, 2016 11:09:21 AM com.twitter.finagle.BaseResolver$$anonfun$resolvers$1 apply
INFO: Resolver[inet] = com.twitter.finagle.InetResolver(com.twitter.finagle.InetResolver&#64;fbb628c)
May 08, 2016 11:09:21 AM com.twitter.finagle.BaseResolver$$anonfun$resolvers$1 apply
INFO: Resolver[fixedinet] = com.twitter.finagle.FixedInetResolver(com.twitter.finagle.FixedInetResolver&#64;5a25adb1)
May 08, 2016 11:09:21 AM com.twitter.finagle.BaseResolver$$anonfun$resolvers$1 apply
INFO: Resolver[neg] = com.twitter.finagle.NegResolver$(com.twitter.finagle.NegResolver$&#64;5fae6db3)
May 08, 2016 11:09:21 AM com.twitter.finagle.BaseResolver$$anonfun$resolvers$1 apply
INFO: Resolver[nil] = com.twitter.finagle.NilResolver$(com.twitter.finagle.NilResolver$&#64;34a433d8)
May 08, 2016 11:09:21 AM com.twitter.finagle.BaseResolver$$anonfun$resolvers$1 apply
INFO: Resolver[fail] = com.twitter.finagle.FailResolver$(com.twitter.finagle.FailResolver$&#64;847c4e8)
May 08, 2016 11:09:22 AM com.twitter.finagle.Init$$anonfun$1 apply$mcV$sp
[dlog] &gt; message-1
[dlog] &gt; message-2
[dlog] &gt; message-3
[dlog] &gt; message-4
[dlog] &gt; message-5
[dlog] &gt;
// Output of `MultiReader`
Opening log stream basic-stream-3
Opening log stream basic-stream-4
Opening log stream basic-stream-5
Opening log stream basic-stream-6
Opening log stream basic-stream-7
Log stream basic-stream-4 is empty.
Wait for records from basic-stream-4 starting from DLSN{logSegmentSequenceNo=1, entryId=0, slotId=0}
Open reader to read records from stream basic-stream-4
Log stream basic-stream-5 is empty.
Wait for records from basic-stream-5 starting from DLSN{logSegmentSequenceNo=1, entryId=0, slotId=0}
Open reader to read records from stream basic-stream-5
Log stream basic-stream-6 is empty.
Wait for records from basic-stream-6 starting from DLSN{logSegmentSequenceNo=1, entryId=0, slotId=0}
Open reader to read records from stream basic-stream-6
Log stream basic-stream-3 is empty.
Wait for records from basic-stream-3 starting from DLSN{logSegmentSequenceNo=1, entryId=0, slotId=0}
Open reader to read records from stream basic-stream-3
Log stream basic-stream-7 is empty.
Wait for records from basic-stream-7 starting from DLSN{logSegmentSequenceNo=1, entryId=0, slotId=0}
Open reader to read records from stream basic-stream-7
Received record DLSN{logSegmentSequenceNo=1, entryId=0, slotId=0} from stream basic-stream-4
&quot;&quot;&quot;
message-1
&quot;&quot;&quot;
Received record DLSN{logSegmentSequenceNo=1, entryId=0, slotId=0} from stream basic-stream-6
&quot;&quot;&quot;
message-2
&quot;&quot;&quot;
Received record DLSN{logSegmentSequenceNo=1, entryId=0, slotId=0} from stream basic-stream-3
&quot;&quot;&quot;
message-3
&quot;&quot;&quot;
Received record DLSN{logSegmentSequenceNo=1, entryId=0, slotId=0} from stream basic-stream-7
&quot;&quot;&quot;
message-4
&quot;&quot;&quot;
Received record DLSN{logSegmentSequenceNo=1, entryId=0, slotId=0} from stream basic-stream-5
&quot;&quot;&quot;
message-5
&quot;&quot;&quot;
</pre>
</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/0.4.0-incubating/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>