You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flume.apache.org by bu...@apache.org on 2013/07/02 08:07:23 UTC

svn commit: r868118 [1/6] - in /websites/staging/flume/trunk/content: ./ .doctrees/ .doctrees/releases/ _sources/ _sources/releases/ _static/ releases/

Author: buildbot
Date: Tue Jul  2 06:07:22 2013
New Revision: 868118

Log:
Staging update by buildbot for flume

Added:
    websites/staging/flume/trunk/content/.doctrees/releases/1.4.0.doctree   (with props)
    websites/staging/flume/trunk/content/_sources/releases/1.4.0.txt
    websites/staging/flume/trunk/content/releases/1.4.0.html
Modified:
    websites/staging/flume/trunk/content/   (props changed)
    websites/staging/flume/trunk/content/.doctrees/FlumeDeveloperGuide.doctree
    websites/staging/flume/trunk/content/.doctrees/FlumeUserGuide.doctree
    websites/staging/flume/trunk/content/.doctrees/documentation.doctree
    websites/staging/flume/trunk/content/.doctrees/download.doctree
    websites/staging/flume/trunk/content/.doctrees/environment.pickle
    websites/staging/flume/trunk/content/.doctrees/getinvolved.doctree
    websites/staging/flume/trunk/content/.doctrees/index.doctree
    websites/staging/flume/trunk/content/.doctrees/license.doctree
    websites/staging/flume/trunk/content/.doctrees/mailinglists.doctree
    websites/staging/flume/trunk/content/.doctrees/releases/1.0.0.doctree
    websites/staging/flume/trunk/content/.doctrees/releases/1.1.0.doctree
    websites/staging/flume/trunk/content/.doctrees/releases/1.2.0.doctree
    websites/staging/flume/trunk/content/.doctrees/releases/1.3.0.doctree
    websites/staging/flume/trunk/content/.doctrees/releases/1.3.1.doctree
    websites/staging/flume/trunk/content/.doctrees/releases/index.doctree
    websites/staging/flume/trunk/content/.doctrees/source.doctree
    websites/staging/flume/trunk/content/.doctrees/team.doctree
    websites/staging/flume/trunk/content/FlumeDeveloperGuide.html
    websites/staging/flume/trunk/content/FlumeUserGuide.html
    websites/staging/flume/trunk/content/_sources/FlumeDeveloperGuide.txt
    websites/staging/flume/trunk/content/_sources/FlumeUserGuide.txt
    websites/staging/flume/trunk/content/_sources/documentation.txt
    websites/staging/flume/trunk/content/_sources/download.txt
    websites/staging/flume/trunk/content/_sources/getinvolved.txt
    websites/staging/flume/trunk/content/_sources/index.txt
    websites/staging/flume/trunk/content/_sources/releases/index.txt
    websites/staging/flume/trunk/content/_static/searchtools.js
    websites/staging/flume/trunk/content/documentation.html
    websites/staging/flume/trunk/content/download.html
    websites/staging/flume/trunk/content/getinvolved.html
    websites/staging/flume/trunk/content/index.html
    websites/staging/flume/trunk/content/project-reports.html
    websites/staging/flume/trunk/content/releases/1.3.1.html
    websites/staging/flume/trunk/content/releases/index.html
    websites/staging/flume/trunk/content/searchindex.js

Propchange: websites/staging/flume/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Tue Jul  2 06:07:22 2013
@@ -1 +1 @@
-1455267
+1498792

Modified: websites/staging/flume/trunk/content/.doctrees/FlumeDeveloperGuide.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/FlumeUserGuide.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/documentation.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/download.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/environment.pickle
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/getinvolved.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/index.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/license.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/mailinglists.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/releases/1.0.0.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/releases/1.1.0.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/releases/1.2.0.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/releases/1.3.0.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/releases/1.3.1.doctree
==============================================================================
Binary files - no diff available.

Added: websites/staging/flume/trunk/content/.doctrees/releases/1.4.0.doctree
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/flume/trunk/content/.doctrees/releases/1.4.0.doctree
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: websites/staging/flume/trunk/content/.doctrees/releases/index.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/source.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/.doctrees/team.doctree
==============================================================================
Binary files - no diff available.

Modified: websites/staging/flume/trunk/content/FlumeDeveloperGuide.html
==============================================================================
--- websites/staging/flume/trunk/content/FlumeDeveloperGuide.html (original)
+++ websites/staging/flume/trunk/content/FlumeDeveloperGuide.html Tue Jul  2 06:07:22 2013
@@ -7,7 +7,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Flume 1.3.0 Developer Guide &mdash; Apache Flume</title>
+    <title>Flume 1.4.0 Developer Guide &mdash; Apache Flume</title>
     
     <link rel="stylesheet" href="_static/flume.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -27,7 +27,7 @@
     <link rel="top" title="Apache Flume" href="index.html" />
     <link rel="up" title="Documentation" href="documentation.html" />
     <link rel="next" title="Releases" href="releases/index.html" />
-    <link rel="prev" title="Flume 1.3.0 User Guide" href="FlumeUserGuide.html" /> 
+    <link rel="prev" title="Flume 1.4.0 User Guide" href="FlumeUserGuide.html" /> 
   </head>
   <body>
 <div class="header">
@@ -59,8 +59,8 @@
         <div class="bodywrapper">
           <div class="body">
             
-  <div class="section" id="flume-1-3-0-developer-guide">
-<h1>Flume 1.3.0 Developer Guide<a class="headerlink" href="#flume-1-3-0-developer-guide" title="Permalink to this headline">¶</a></h1>
+  <div class="section" id="flume-1-4-0-developer-guide">
+<h1>Flume 1.4.0 Developer Guide<a class="headerlink" href="#flume-1-4-0-developer-guide" title="Permalink to this headline">¶</a></h1>
 <div class="section" id="introduction">
 <h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
 <div class="section" id="overview">
@@ -182,14 +182,14 @@ required <tt class="docutils literal"><s
 by using a convenience implementation such as the SimpleEvent class, or by using
 <tt class="docutils literal"><span class="pre">EventBuilder</span></tt>&#8216;s overloaded <tt class="docutils literal"><span class="pre">withBody()</span></tt> static helper methods.</p>
 </div>
-<div class="section" id="avro-rpc-default-client">
-<h5>Avro RPC default client<a class="headerlink" href="#avro-rpc-default-client" title="Permalink to this headline">¶</a></h5>
-<p>As of Flume 1.1.0, Avro is the only supported RPC protocol.  The
-<tt class="docutils literal"><span class="pre">NettyAvroRpcClient</span></tt> implements the <tt class="docutils literal"><span class="pre">RpcClient</span></tt> interface. The client needs
-to create this object with the host and port of the target Flume agent, and can
-then use the <tt class="docutils literal"><span class="pre">RpcClient</span></tt> to send data into the agent. The following example
-shows how to use the Flume Client SDK API within a user&#8217;s data-generating
-application:</p>
+<div class="section" id="rpc-clients-avro-and-thrift">
+<h5>RPC clients - Avro and Thrift<a class="headerlink" href="#rpc-clients-avro-and-thrift" title="Permalink to this headline">¶</a></h5>
+<p>As of Flume 1.4.0, Avro is the default RPC protocol.  The
+<tt class="docutils literal"><span class="pre">NettyAvroRpcClient</span></tt> and <tt class="docutils literal"><span class="pre">ThriftRpcClient</span></tt> implement the <tt class="docutils literal"><span class="pre">RpcClient</span></tt>
+interface. The client needs to create this object with the host and port of
+the target Flume agent, and canthen use the <tt class="docutils literal"><span class="pre">RpcClient</span></tt> to send data into
+the agent. The following example shows how to use the Flume Client SDK API
+within a user&#8217;s data-generating application:</p>
 <div class="highlight-java"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">org.apache.flume.Event</span><span class="o">;</span>
 <span class="kn">import</span> <span class="nn">org.apache.flume.EventDeliveryException</span><span class="o">;</span>
 <span class="kn">import</span> <span class="nn">org.apache.flume.api.RpcClient</span><span class="o">;</span>
@@ -224,6 +224,8 @@ application:</p>
     <span class="k">this</span><span class="o">.</span><span class="na">hostname</span> <span class="o">=</span> <span class="n">hostname</span><span class="o">;</span>
     <span class="k">this</span><span class="o">.</span><span class="na">port</span> <span class="o">=</span> <span class="n">port</span><span class="o">;</span>
     <span class="k">this</span><span class="o">.</span><span class="na">client</span> <span class="o">=</span> <span class="n">RpcClientFactory</span><span class="o">.</span><span class="na">getDefaultInstance</span><span class="o">(</span><span class="n">hostname</span><span class="o">,</span> <span class="n">port</span><span class="o">);</span>
+    <span class="c1">// Use the following method to create a thrift client (instead of the above line):</span>
+    <span class="c1">// this.client = RpcClientFactory.getThriftInstance(hostname, port);</span>
   <span class="o">}</span>
 
   <span class="kd">public</span> <span class="kt">void</span> <span class="nf">sendDataToFlume</span><span class="o">(</span><span class="n">String</span> <span class="n">data</span><span class="o">)</span> <span class="o">{</span>
@@ -238,6 +240,8 @@ application:</p>
       <span class="n">client</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
       <span class="n">client</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
       <span class="n">client</span> <span class="o">=</span> <span class="n">RpcClientFactory</span><span class="o">.</span><span class="na">getDefaultInstance</span><span class="o">(</span><span class="n">hostname</span><span class="o">,</span> <span class="n">port</span><span class="o">);</span>
+      <span class="c1">// Use the following method to create a thrift client (instead of the above line):</span>
+      <span class="c1">// this.client = RpcClientFactory.getThriftInstance(hostname, port);</span>
     <span class="o">}</span>
   <span class="o">}</span>
 
@@ -249,7 +253,8 @@ application:</p>
 <span class="o">}</span>
 </pre></div>
 </div>
-<p>The remote Flume agent needs to have an <tt class="docutils literal"><span class="pre">AvroSource</span></tt> listening on some port.
+<p>The remote Flume agent needs to have an <tt class="docutils literal"><span class="pre">AvroSource</span></tt> (or a
+<tt class="docutils literal"><span class="pre">ThriftSource</span></tt> if you are using a Thrift client) listening on some port.
 Below is an example Flume agent configuration that&#8217;s waiting for a connection
 from MyApp:</p>
 <div class="highlight-properties"><div class="highlight"><pre><span class="na">a1.channels</span> <span class="o">=</span> <span class="s">c1</span>
@@ -260,6 +265,8 @@ from MyApp:</p>
 
 <span class="na">a1.sources.r1.channels</span> <span class="o">=</span> <span class="s">c1</span>
 <span class="na">a1.sources.r1.type</span> <span class="o">=</span> <span class="s">avro</span>
+<span class="c"># For using a thrift source set the following instead of the above line.</span>
+<span class="c"># a1.source.r1.type = thrift</span>
 <span class="na">a1.sources.r1.bind</span> <span class="o">=</span> <span class="s">0.0.0.0</span>
 <span class="na">a1.sources.r1.port</span> <span class="o">=</span> <span class="s">41414</span>
 
@@ -267,9 +274,10 @@ from MyApp:</p>
 <span class="na">a1.sinks.k1.type</span> <span class="o">=</span> <span class="s">logger</span>
 </pre></div>
 </div>
-<p>For more flexibility, the default Flume client implementation
-(<tt class="docutils literal"><span class="pre">NettyAvroRpcClient</span></tt>) can be configured with these properties:</p>
-<div class="highlight-properties"><div class="highlight"><pre><span class="na">client.type</span> <span class="o">=</span> <span class="s">default</span>
+<p>For more flexibility, the default Flume client implementations
+(<tt class="docutils literal"><span class="pre">NettyAvroRpcClient</span></tt> and <tt class="docutils literal"><span class="pre">ThriftRpcClient</span></tt>) can be configured with these
+properties:</p>
+<div class="highlight-properties"><div class="highlight"><pre><span class="na">client.type</span> <span class="o">=</span> <span class="s">default (for avro) or thrift (for thrift)</span>
 
 <span class="na">hosts</span> <span class="o">=</span> <span class="s">h1                           # default client accepts only 1 host</span>
                                      <span class="c"># (additional hosts will be ignored)</span>
@@ -289,7 +297,8 @@ from MyApp:</p>
 <h5>Failover Client<a class="headerlink" href="#failover-client" title="Permalink to this headline">¶</a></h5>
 <p>This class wraps the default Avro RPC client to provide failover handling
 capability to clients. This takes a whitespace-separated list of &lt;host&gt;:&lt;port&gt;
-representing the Flume agents that make-up a failover group. If there’s a
+representing the Flume agents that make-up a failover group. The Failover RPC
+Client currently does not support thrift. If there’s a
 communication error with the currently selected host (i.e. agent) agent,
 then the failover client automatically fails-over to the next host in the list.
 For example:</p>
@@ -358,7 +367,8 @@ randomly selects one of the configured h
 fashion. You can also specify your own custom class that implements the
 <tt class="docutils literal"><span class="pre">LoadBalancingRpcClient$HostSelector</span></tt> interface so that a custom selection
 order is used. In that case, the FQCN of the custom class needs to be specified
-as the value of the <tt class="docutils literal"><span class="pre">host-selector</span></tt> property.</p>
+as the value of the <tt class="docutils literal"><span class="pre">host-selector</span></tt> property. The LoadBalancing RPC Client
+currently does not support thrift.</p>
 <p>If <tt class="docutils literal"><span class="pre">backoff</span></tt> is enabled then the client will temporarily blacklist
 hosts that fail, causing them to be excluded from being selected as a failover
 host until a given timeout. When the timeout elapses, if the host is still
@@ -438,6 +448,99 @@ For example:</p>
 </div>
 </div>
 </div>
+<div class="section" id="embedded-agent">
+<h4>Embedded agent<a class="headerlink" href="#embedded-agent" title="Permalink to this headline">¶</a></h4>
+<p>Flume has an embedded agent api which allows users to embed an agent in their
+application. This agent is meant to be lightweight and as such not all
+sources, sinks, and channels are allowed. Specifically the source used
+is a special embedded source and events should be send to the source
+via the put, putAll methods on the EmbeddedAgent object. Only File Channel
+and Memory Channel are allowed as channels while Avro Sink is the only
+supported sink.</p>
+<p>Note: The embedded agent has a dependency on hadoop-core.jar.</p>
+<p>Configuration of an Embedded Agent is similar to configuration of a
+full Agent. The following is an exhaustive list of configration options:</p>
+<p>Required properties are in <strong>bold</strong>.</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="11%" />
+<col width="9%" />
+<col width="80%" />
+</colgroup>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Property Name</th>
+<th class="head">Default</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr class="row-even"><td>source.type</td>
+<td>embedded</td>
+<td>The only available source is the embedded source.</td>
+</tr>
+<tr class="row-odd"><td><strong>channel.type</strong></td>
+<td>&#8211;</td>
+<td>Either <tt class="docutils literal"><span class="pre">memory</span></tt> or <tt class="docutils literal"><span class="pre">file</span></tt> which correspond to MemoryChannel and FileChannel respectively.</td>
+</tr>
+<tr class="row-even"><td>channel.*</td>
+<td>&#8211;</td>
+<td>Configuration options for the channel type requested, see MemoryChannel or FileChannel user guide for an exhaustive list.</td>
+</tr>
+<tr class="row-odd"><td><strong>sinks</strong></td>
+<td>&#8211;</td>
+<td>List of sink names</td>
+</tr>
+<tr class="row-even"><td><strong>sink.type</strong></td>
+<td>&#8211;</td>
+<td>Property name must match a name in the list of sinks. Value must be <tt class="docutils literal"><span class="pre">avro</span></tt></td>
+</tr>
+<tr class="row-odd"><td>sink.*</td>
+<td>&#8211;</td>
+<td>Configuration options for the sink. See AvroSink user guide for an exhaustive list, however note AvroSink requires at least hostname and port.</td>
+</tr>
+<tr class="row-even"><td><strong>processor.type</strong></td>
+<td>&#8211;</td>
+<td>Either <tt class="docutils literal"><span class="pre">failover</span></tt> or <tt class="docutils literal"><span class="pre">load_balance</span></tt> which correspond to FailoverSinksProcessor and LoadBalancingSinkProcessor respectively.</td>
+</tr>
+<tr class="row-odd"><td>processor.*</td>
+<td>&#8211;</td>
+<td>Configuration options for the sink processor selected. See FailoverSinksProcessor and LoadBalancingSinkProcessor user guide for an exhaustive list.</td>
+</tr>
+</tbody>
+</table>
+<p>Below is an example of how to use the agent:</p>
+<div class="highlight-java"><div class="highlight"><pre><span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="o">,</span> <span class="n">String</span><span class="o">&gt;</span> <span class="n">properties</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HashMap</span><span class="o">&lt;</span><span class="n">String</span><span class="o">,</span> <span class="n">String</span><span class="o">&gt;();</span>
+<span class="n">properties</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;channel.type&quot;</span><span class="o">,</span> <span class="s">&quot;memory&quot;</span><span class="o">);</span>
+<span class="n">properties</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;channel.capacity&quot;</span><span class="o">,</span> <span class="s">&quot;200&quot;</span><span class="o">);</span>
+<span class="n">properties</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;sinks&quot;</span><span class="o">,</span> <span class="s">&quot;sink1 sink2&quot;</span><span class="o">);</span>
+<span class="n">properties</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;sink1.type&quot;</span><span class="o">,</span> <span class="s">&quot;avro&quot;</span><span class="o">);</span>
+<span class="n">properties</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;sink2.type&quot;</span><span class="o">,</span> <span class="s">&quot;avro&quot;</span><span class="o">);</span>
+<span class="n">properties</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;sink1.hostname&quot;</span><span class="o">,</span> <span class="s">&quot;collector1.apache.org&quot;</span><span class="o">);</span>
+<span class="n">properties</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;sink1.port&quot;</span><span class="o">,</span> <span class="s">&quot;5564&quot;</span><span class="o">);</span>
+<span class="n">properties</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;sink2.hostname&quot;</span><span class="o">,</span> <span class="s">&quot;collector2.apache.org&quot;</span><span class="o">);</span>
+<span class="n">properties</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;sink2.port&quot;</span><span class="o">,</span>  <span class="s">&quot;5565&quot;</span><span class="o">);</span>
+<span class="n">properties</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;processor.type&quot;</span><span class="o">,</span> <span class="s">&quot;load_balance&quot;</span><span class="o">);</span>
+
+<span class="n">EmbeddedAgent</span> <span class="n">agent</span> <span class="o">=</span> <span class="k">new</span> <span class="n">EmbeddedAgent</span><span class="o">(</span><span class="s">&quot;myagent&quot;</span><span class="o">);</span>
+
+<span class="n">agent</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">properties</span><span class="o">);</span>
+<span class="n">agent</span><span class="o">.</span><span class="na">start</span><span class="o">();</span>
+
+<span class="n">List</span><span class="o">&lt;</span><span class="n">Event</span><span class="o">&gt;</span> <span class="n">events</span> <span class="o">=</span> <span class="n">Lists</span><span class="o">.</span><span class="na">newArrayList</span><span class="o">();</span>
+
+<span class="n">events</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">event</span><span class="o">);</span>
+<span class="n">events</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">event</span><span class="o">);</span>
+<span class="n">events</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">event</span><span class="o">);</span>
+<span class="n">events</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">event</span><span class="o">);</span>
+
+<span class="n">agent</span><span class="o">.</span><span class="na">putAll</span><span class="o">(</span><span class="n">events</span><span class="o">);</span>
+
+<span class="o">...</span>
+
+<span class="n">agent</span><span class="o">.</span><span class="na">stop</span><span class="o">();</span>
+</pre></div>
+</div>
+</div>
 <div class="section" id="transaction-interface">
 <h4>Transaction interface<a class="headerlink" href="#transaction-interface" title="Permalink to this headline">¶</a></h4>
 <p>The <tt class="docutils literal"><span class="pre">Transaction</span></tt> interface is the basis of reliability for Flume. All the
@@ -487,7 +590,7 @@ committed and closed.</p>
 <h4>Sink<a class="headerlink" href="#sink" title="Permalink to this headline">¶</a></h4>
 <p>The purpose of a <tt class="docutils literal"><span class="pre">Sink</span></tt> to extract <tt class="docutils literal"><span class="pre">Event</span></tt>s from the <tt class="docutils literal"><span class="pre">Channel</span></tt> and
 forward them to the next Flume Agent in the flow or store them in an external
-repository. A <tt class="docutils literal"><span class="pre">Sink</span></tt> is associated with one or more <tt class="docutils literal"><span class="pre">Channel</span></tt>s, as
+repository. A <tt class="docutils literal"><span class="pre">Sink</span></tt> is associated with exactly one <tt class="docutils literal"><span class="pre">Channel</span></tt>s, as
 configured in the Flume properties file. There’s one <tt class="docutils literal"><span class="pre">SinkRunner</span></tt> instance
 associated with every configured <tt class="docutils literal"><span class="pre">Sink</span></tt>, and when the Flume framework calls
 <tt class="docutils literal"><span class="pre">SinkRunner.start()</span></tt>, a new thread is created to drive the <tt class="docutils literal"><span class="pre">Sink</span></tt> (using
@@ -703,7 +806,7 @@ mechanism that captures the new data and
 
 <h3><a href="index.html">This Page</a></h3>
 <ul>
-<li><a class="reference internal" href="#">Flume 1.3.0 Developer Guide</a><ul>
+<li><a class="reference internal" href="#">Flume 1.4.0 Developer Guide</a><ul>
 <li><a class="reference internal" href="#introduction">Introduction</a><ul>
 <li><a class="reference internal" href="#overview">Overview</a></li>
 <li><a class="reference internal" href="#architecture">Architecture</a><ul>
@@ -720,11 +823,12 @@ mechanism that captures the new data and
 <li><a class="reference internal" href="#client">Client</a><ul>
 <li><a class="reference internal" href="#client-sdk">Client SDK</a></li>
 <li><a class="reference internal" href="#rpc-client-interface">RPC client interface</a></li>
-<li><a class="reference internal" href="#avro-rpc-default-client">Avro RPC default client</a></li>
+<li><a class="reference internal" href="#rpc-clients-avro-and-thrift">RPC clients - Avro and Thrift</a></li>
 <li><a class="reference internal" href="#failover-client">Failover Client</a></li>
 <li><a class="reference internal" href="#loadbalancing-rpc-client">LoadBalancing RPC client</a></li>
 </ul>
 </li>
+<li><a class="reference internal" href="#embedded-agent">Embedded agent</a></li>
 <li><a class="reference internal" href="#transaction-interface">Transaction interface</a></li>
 <li><a class="reference internal" href="#sink">Sink</a></li>
 <li><a class="reference internal" href="#source">Source</a></li>