<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.9">
<meta name="Forrest-skin-name" content="pelt">
<title>ZooKeeper</title>
<link type="text/css" href="skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
<link type="text/css" href="skin/profile.css" rel="stylesheet">
<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
<link rel="shortcut icon" href="images/favicon.ico">
</head>
<body onload="init()">
<script type="text/javascript">ndeSetTextSize();</script>
<div id="top">
<!--+
    |breadtrail
    +-->
<div class="breadtrail">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://hadoop.apache.org/">Hadoop</a> &gt; <a href="http://hadoop.apache.org/zookeeper/">ZooKeeper</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
</div>
<!--+
    |header
    +-->
<div class="header">
<!--+
    |start group logo
    +-->
<div class="grouplogo">
<a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
</div>
<!--+
    |end group logo
    +-->
<!--+
    |start Project Logo
    +-->
<div class="projectlogo">
<a href="http://hadoop.apache.org/zookeeper/"><img class="logoImage" alt="ZooKeeper" src="images/zookeeper_small.gif" title="ZooKeeper: distributed coordination"></a>
</div>
<!--+
    |end Project Logo
    +-->
<!--+
    |start Search
    +-->
<div class="searchbox">
<form action="http://www.google.com/search" method="get" class="roundtopsmall">
<input value="hadoop.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
                    <input name="Search" value="Search" type="submit">
</form>
</div>
<!--+
    |end search
    +-->
<!--+
    |start Tabs
    +-->
<ul id="tabs">
<li>
<a class="unselected" href="http://hadoop.apache.org/zookeeper/">Project</a>
</li>
<li>
<a class="unselected" href="http://wiki.apache.org/hadoop/ZooKeeper">Wiki</a>
</li>
<li class="current">
<a class="selected" href="index.html">ZooKeeper 3.3 Documentation</a>
</li>
</ul>
<!--+
    |end Tabs
    +-->
</div>
</div>
<div id="main">
<div id="publishedStrip">
<!--+
    |start Subtabs
    +-->
<div id="level2tabs"></div>
<!--+
    |end Endtabs
    +-->
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<!--+
    |breadtrail
    +-->
<div class="breadtrail">

             &nbsp;
           </div>
<!--+
    |start Menu, mainarea
    +-->
<!--+
    |start Menu
    +-->
<div id="menu">
<div onclick="SwitchMenu('menu_selected_1.1', 'skin/')" id="menu_selected_1.1Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">Overview</div>
<div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="index.html">Welcome</a>
</div>
<div class="menupage">
<div class="menupagetitle">Overview</div>
</div>
<div class="menuitem">
<a href="zookeeperStarted.html">Getting Started</a>
</div>
<div class="menuitem">
<a href="releasenotes.html">Release Notes</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.2', 'skin/')" id="menu_1.2Title" class="menutitle">Developer</div>
<div id="menu_1.2" class="menuitemgroup">
<div class="menuitem">
<a href="api/index.html">API Docs</a>
</div>
<div class="menuitem">
<a href="zookeeperProgrammers.html">Programmer's Guide</a>
</div>
<div class="menuitem">
<a href="javaExample.html">Java Example</a>
</div>
<div class="menuitem">
<a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a>
</div>
<div class="menuitem">
<a href="recipes.html">Recipes</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">BookKeeper</div>
<div id="menu_1.3" class="menuitemgroup">
<div class="menuitem">
<a href="bookkeeperStarted.html">Getting started</a>
</div>
<div class="menuitem">
<a href="bookkeeperOverview.html">Overview</a>
</div>
<div class="menuitem">
<a href="bookkeeperConfig.html">Setup guide</a>
</div>
<div class="menuitem">
<a href="bookkeeperProgrammer.html">Programmer's guide</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Admin &amp; Ops</div>
<div id="menu_1.4" class="menuitemgroup">
<div class="menuitem">
<a href="zookeeperAdmin.html">Administrator's Guide</a>
</div>
<div class="menuitem">
<a href="zookeeperQuotas.html">Quota Guide</a>
</div>
<div class="menuitem">
<a href="zookeeperJMX.html">JMX</a>
</div>
<div class="menuitem">
<a href="zookeeperObservers.html">Observers Guide</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Contributor</div>
<div id="menu_1.5" class="menuitemgroup">
<div class="menuitem">
<a href="zookeeperInternals.html">ZooKeeper Internals</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.6', 'skin/')" id="menu_1.6Title" class="menutitle">Miscellaneous</div>
<div id="menu_1.6" class="menuitemgroup">
<div class="menuitem">
<a href="http://wiki.apache.org/hadoop/ZooKeeper">Wiki</a>
</div>
<div class="menuitem">
<a href="http://wiki.apache.org/hadoop/ZooKeeper/FAQ">FAQ</a>
</div>
<div class="menuitem">
<a href="http://hadoop.apache.org/zookeeper/mailing_lists.html">Mailing Lists</a>
</div>
</div>
<div id="credit"></div>
<div id="roundbottom">
<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
<!--+
  |alternative credits
  +-->
<div id="credit2"></div>
</div>
<!--+
    |end Menu
    +-->
<!--+
    |start content
    +-->
<div id="content">
<div title="Portable Document Format" class="pdflink">
<a class="dida" href="zookeeperOver.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
        PDF</a>
</div>
<h1>ZooKeeper</h1>
<div id="front-matter">
<div id="minitoc-area">
<ul class="minitoc">
<li>
<a href="#ch_DesignOverview">ZooKeeper: A Distributed Coordination Service for Distributed
    Applications</a>
<ul class="minitoc">
<li>
<a href="#sc_designGoals">Design Goals</a>
</li>
<li>
<a href="#sc_dataModelNameSpace">Data model and the hierarchical namespace</a>
</li>
<li>
<a href="#Nodes+and+ephemeral+nodes">Nodes and ephemeral nodes</a>
</li>
<li>
<a href="#Conditional+updates+and+watches">Conditional updates and watches</a>
</li>
<li>
<a href="#Guarantees">Guarantees</a>
</li>
<li>
<a href="#Simple+API">Simple API</a>
</li>
<li>
<a href="#Implementation">Implementation</a>
</li>
<li>
<a href="#Uses">Uses</a>
</li>
<li>
<a href="#Performance">Performance</a>
</li>
<li>
<a href="#Reliability">Reliability</a>
</li>
<li>
<a href="#The+ZooKeeper+Project">The ZooKeeper Project</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
  

  

  
<a name="ch_DesignOverview"></a>
<h2 class="h3">ZooKeeper: A Distributed Coordination Service for Distributed
    Applications</h2>
<div class="section">
<p>ZooKeeper is a distributed, open-source coordination service for
    distributed applications. It exposes a simple set of primitives that
    distributed applications can build upon to implement higher level services
    for synchronization, configuration maintenance, and groups and naming. It
    is designed to be easy to program to, and uses a data model styled after
    the familiar directory tree structure of file systems. It runs in Java and
    has bindings for both Java and C.</p>
<p>Coordination services are notoriously hard to get right. They are
    especially prone to errors such as race conditions and deadlock. The
    motivation behind ZooKeeper is to relieve distributed applications the
    responsibility of implementing coordination services from scratch.</p>
<a name="sc_designGoals"></a>
<h3 class="h4">Design Goals</h3>
<p>
<strong>ZooKeeper is simple.</strong> ZooKeeper
      allows distributed processes to coordinate with each other through a
      shared hierarchal namespace which is organized similarly to a standard
      file system. The name space consists of data registers - called znodes,
      in ZooKeeper parlance - and these are similar to files and directories.
      Unlike a typical file system, which is designed for storage, ZooKeeper
      data is kept in-memory, which means ZooKeeper can acheive high
      throughput and low latency numbers.</p>
<p>The ZooKeeper implementation puts a premium on high performance,
      highly available, strictly ordered access. The performance aspects of
      ZooKeeper means it can be used in large, distributed systems. The
      reliability aspects keep it from being a single point of failure. The
      strict ordering means that sophisticated synchronization primitives can
      be implemented at the client.</p>
<p>
<strong>ZooKeeper is replicated.</strong> Like the
      distributed processes it coordinates, ZooKeeper itself is intended to be
      replicated over a sets of hosts called an ensemble.</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
<tr>
<td>ZooKeeper Service</td>
</tr>
<tr>
<td>
          
            <img alt="" src="images/zkservice.jpg">
          
        </td>
</tr>
</table>
<p>The servers that make up the ZooKeeper service must all know about
      each other. They maintain an in-memory image of state, along with a
      transaction logs and snapshots in a persistent store. As long as a
      majority of the servers are available, the ZooKeeper service will be
      available.</p>
<p>Clients connect to a single ZooKeeper server. The client maintains
      a TCP connection through which it sends requests, gets responses, gets
      watch events, and sends heart beats. If the TCP connection to the server
      breaks, the client will connect to a different server.</p>
<p>
<strong>ZooKeeper is ordered.</strong> ZooKeeper
      stamps each update with a number that reflects the order of all
      ZooKeeper transactions. Subsequent operations can use the order to
      implement higher-level abstractions, such as synchronization
      primitives.</p>
<p>
<strong>ZooKeeper is fast.</strong> It is
      especially fast in "read-dominant" workloads. ZooKeeper applications run
      on thousands of machines, and it performs best where reads are more
      common than writes, at ratios of around 10:1.</p>
<a name="sc_dataModelNameSpace"></a>
<h3 class="h4">Data model and the hierarchical namespace</h3>
<p>The name space provided by ZooKeeper is much like that of a
      standard file system. A name is a sequence of path elements separated by
      a slash (/). Every node in ZooKeeper's name space is identified by a
      path.</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
<tr>
<td>ZooKeeper's Hierarchical Namespace</td>
</tr>
<tr>
<td>
          
            <img alt="" src="images/zknamespace.jpg">
          
        </td>
</tr>
</table>
<a name="Nodes+and+ephemeral+nodes"></a>
<h3 class="h4">Nodes and ephemeral nodes</h3>
<p>Unlike is standard file systems, each node in a ZooKeeper
      namespace can have data associated with it as well as children. It is
      like having a file-system that allows a file to also be a directory.
      (ZooKeeper was designed to store coordination data: status information,
      configuration, location information, etc., so the data stored at each
      node is usually small, in the byte to kilobyte range.) We use the term
      <em>znode</em> to make it clear that we are talking about
      ZooKeeper data nodes.</p>
<p>Znodes maintain a stat structure that includes version numbers for
      data changes, ACL changes, and timestamps, to allow cache validations
      and coordinated updates. Each time a znode's data changes, the version
      number increases. For instance, whenever a client retrieves data it also
      receives the version of the data.</p>
<p>The data stored at each znode in a namespace is read and written
      atomically. Reads get all the data bytes associated with a znode and a
      write replaces all the data. Each node has an Access Control List (ACL)
      that restricts who can do what.</p>
<p>ZooKeeper also has the notion of ephemeral nodes. These znodes
      exists as long as the session that created the znode is active. When the
      session ends the znode is deleted. Ephemeral nodes are useful when you
      want to implement <em>[tbd]</em>.</p>
<a name="Conditional+updates+and+watches"></a>
<h3 class="h4">Conditional updates and watches</h3>
<p>ZooKeeper supports the concept of <em>watches</em>.
      Clients can set a watch on a znodes. A watch will be triggered and
      removed when the znode changes. When a watch is triggered the client
      receives a packet saying that the znode has changed. And if the
      connection between the client and one of the Zoo Keeper servers is
      broken, the client will receive a local notification. These can be used
      to <em>[tbd]</em>.</p>
<a name="Guarantees"></a>
<h3 class="h4">Guarantees</h3>
<p>ZooKeeper is very fast and very simple. Since its goal, though, is
      to be a basis for the construction of more complicated services, such as
      synchronization, it provides a set of guarantees. These are:</p>
<ul>
        
<li>
          
<p>Sequential Consistency - Updates from a client will be applied
          in the order that they were sent.</p>
        
</li>

        
<li>
          
<p>Atomicity - Updates either succeed or fail. No partial
          results.</p>
        
</li>

        
<li>
          
<p>Single System Image - A client will see the same view of the
          service regardless of the server that it connects to.</p>
        
</li>
      
</ul>
<ul>
        
<li>
          
<p>Reliability - Once an update has been applied, it will persist
          from that time forward until a client overwrites the update.</p>
        
</li>
      
</ul>
<ul>
        
<li>
          
<p>Timeliness - The clients view of the system is guaranteed to
          be up-to-date within a certain time bound.</p>
        
</li>
      
</ul>
<p>For more information on these, and how they can be used, see
      <em>[tbd]</em>
</p>
<a name="Simple+API"></a>
<h3 class="h4">Simple API</h3>
<p>One of the design goals of ZooKeeper is provide a very simple
      programming interface. As a result, it supports only these
      operations:</p>
<dl>
        
<dt>
<term>create</term>
</dt>
<dd>
<p>creates a node at a location in the tree</p>
</dd>

        
<dt>
<term>delete</term>
</dt>
<dd>
<p>deletes a node</p>
</dd>

        
<dt>
<term>exists</term>
</dt>
<dd>
<p>tests if a node exists at a location</p>
</dd>

        
<dt>
<term>get data</term>
</dt>
<dd>
<p>reads the data from a node</p>
</dd>

        
<dt>
<term>set data</term>
</dt>
<dd>
<p>writes data to a node</p>
</dd>

        
<dt>
<term>get children</term>
</dt>
<dd>
<p>retrieves a list of children of a node</p>
</dd>

        
<dt>
<term>sync</term>
</dt>
<dd>
<p>waits for data to be propagated</p>
</dd>
      
</dl>
<p>For a more in-depth discussion on these, and how they can be used
      to implement higher level operations, please refer to
      <em>[tbd]</em>
</p>
<a name="Implementation"></a>
<h3 class="h4">Implementation</h3>
<p>
<a href="#fg_zkComponents">ZooKeeper Components</a> shows the high-level components
      of the ZooKeeper service. With the exception of the request processor,
     each of
      the servers that make up the ZooKeeper service replicates its own copy
      of each of components.</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
<tr>
<td>ZooKeeper Components</td>
</tr>
<tr>
<td>
          
            <img alt="" src="images/zkcomponents.jpg">
          
        </td>
</tr>
</table>
<p>The replicated database is an in-memory database containing the
      entire data tree. Updates are logged to disk for recoverability, and
      writes are serialized to disk before they are applied to the in-memory
      database.</p>
<p>Every ZooKeeper server services clients. Clients connect to
      exactly one server to submit irequests. Read requests are serviced from
      the local replica of each server database. Requests that change the
      state of the service, write requests, are processed by an agreement
      protocol.</p>
<p>As part of the agreement protocol all write requests from clients
      are forwarded to a single server, called the
      <em>leader</em>. The rest of the ZooKeeper servers, called
      <em>followers</em>, receive message proposals from the
      leader and agree upon message delivery. The messaging layer takes care
      of replacing leaders on failures and syncing followers with
      leaders.</p>
<p>ZooKeeper uses a custom atomic messaging protocol. Since the
      messaging layer is atomic, ZooKeeper can guarantee that the local
      replicas never diverge. When the leader receives a write request, it
      calculates what the state of the system is when the write is to be
      applied and transforms this into a transaction that captures this new
      state.</p>
<a name="Uses"></a>
<h3 class="h4">Uses</h3>
<p>The programming interface to ZooKeeper is deliberately simple.
      With it, however, you can implement higher order operations, such as
      synchronizations primitives, group membership, ownership, etc. Some
      distributed applications have used it to: <em>[tbd: add uses from
      white paper and video presentation.]</em> For more information, see
      <em>[tbd]</em>
</p>
<a name="Performance"></a>
<h3 class="h4">Performance</h3>
<p>ZooKeeper is designed to be highly performant. But is it? The
      results of the ZooKeeper's development team at Yahoo! Research indicate
      that it is. (See <a href="#fg_zkPerfRW">ZooKeeper Throughput as the Read-Write Ratio Varies</a>.) It is especially high
      performance in applications where reads outnumber writes, since writes
      involve synchronizing the state of all servers. (Reads outnumbering
      writes is typically the case for a coordination service.)</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
<tr>
<td>ZooKeeper Throughput as the Read-Write Ratio Varies</td>
</tr>
<tr>
<td>
          
            <img alt="" src="images/zkperfRW-3.2.jpg">
          
        </td>
</tr>
</table>
<p>The figure <a href="#fg_zkPerfRW">ZooKeeper Throughput as the Read-Write Ratio Varies</a> is a throughput
      graph of ZooKeeper release 3.2 running on servers with dual 2Ghz
      Xeon and two SATA 15K RPM drives.  One drive was used as a
      dedicated ZooKeeper log device. The snapshots were written to
      the OS drive. Write requests were 1K writes and the reads were
      1K reads.  "Servers" indicate the size of the ZooKeeper
      ensemble, the number of servers that make up the
      service. Approximately 30 other servers were used to simulate
      the clients. The ZooKeeper ensemble was configured such that
      leaders do not allow connections from clients.</p>
<div class="note">
<div class="label">Note</div>
<div class="content">
<p>In version 3.2 r/w performance improved by ~2x
      compared to the <a href="http://hadoop.apache.org/zookeeper/docs/r3.1.1/zookeeperOver.html#Performance">previous
      3.1 release</a>.</p>
</div>
</div>
<p>Benchmarks also indicate that it is reliable, too. <a href="#fg_zkPerfReliability">Reliability in the Presence of Errors</a> shows how a deployment responds to
      various failures. The events marked in the figure are the
      following:</p>
<ol>
        
<li>
          
<p>Failure and recovery of a follower</p>
        
</li>

        
<li>
          
<p>Failure and recovery of a different follower</p>
        
</li>

        
<li>
          
<p>Failure of the leader</p>
        
</li>

        
<li>
          
<p>Failure and recovery of two followers</p>
        
</li>

        
<li>
          
<p>Failure of another leader</p>
        
</li>
      
</ol>
<a name="Reliability"></a>
<h3 class="h4">Reliability</h3>
<p>To show the behavior of the system over time as
        failures are injected we ran a ZooKeeper service made up of
        7 machines. We ran the same saturation benchmark as before,
        but this time we kept the write percentage at a constant
        30%, which is a conservative ratio of our expected
        workloads.
      </p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
<tr>
<td>Reliability in the Presence of Errors</td>
</tr>
<tr>
<td>
          
            <img alt="" src="images/zkperfreliability.jpg">
          
        </td>
</tr>
</table>
<p>The are a few important observations from this graph. First, if
      followers fail and recover quickly, then ZooKeeper is able to sustain a
      high throughput despite the failure. But maybe more importantly, the
      leader election algorithm allows for the system to recover fast enough
      to prevent throughput from dropping substantially. In our observations,
      ZooKeeper takes less than 200ms to elect a new leader. Third, as
      followers recover, ZooKeeper is able to raise throughput again once they
      start processing requests.</p>
<a name="The+ZooKeeper+Project"></a>
<h3 class="h4">The ZooKeeper Project</h3>
<p>ZooKeeper has been
        <a href="http://wiki.apache.org/hadoop/ZooKeeper/PoweredBy">
          successfully used
        </a>
        in many industrial applications.  It is used at Yahoo! as the
        coordination and failure recovery service for Yahoo! Message
        Broker, which is a highly scalable publish-subscribe system
        managing thousands of topics for replication and data
        delivery.  It is used by the Fetching Service for Yahoo!
        crawler, where it also manages failure recovery. A number of
        Yahoo! advertising systems also use ZooKeeper to implement
        reliable services.
      </p>
<p>All users and developers are encouraged to join the
        community and contribute their expertise. See the
        <a href="http://hadoop.apache.org/zookeeper/">
          Zookeeper Project on Apache
        </a>
        for more information.
      </p>
</div>

<p align="right">
<font size="-2"></font>
</p>
</div>
<!--+
    |end content
    +-->
<div class="clearboth">&nbsp;</div>
</div>
<div id="footer">
<!--+
    |start bottomstrip
    +-->
<div class="lastmodified">
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<div class="copyright">
        Copyright &copy;
         2008-2013 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
</div>
<!--+
    |end bottomstrip
    +-->
</div>
</body>
</html>
