<!--
 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.
-->

<!--#include virtual="../includes/_header.htm" -->
<!--#include virtual="../includes/_top.htm" -->
<div class="content documentation">
	<!--#include virtual="../includes/_nav.htm" -->
	<div class="right">
		<!--#include virtual="../includes/_docs_banner.htm" -->
		<h1>Documentation</h1>
    <h3>Kafka 0.9.0</h3>
		<p>
    	Prior releases: <a href="/07/documentation.html">0.7.x</a>, <a href="/08/documentation.html">0.8.0</a>, <a href="/081/documentation.html">0.8.1.X</a>, <a href="/082/documentation.html">0.8.2.X</a>.
		</p>

    <ul class="toc">
        <li><a href="#gettingStarted">1. Getting Started</a>
             <ul>
                 <li><a href="#introduction">1.1 Introduction</a>
                 <li><a href="#uses">1.2 Use Cases</a>
                 <li><a href="#quickstart">1.3 Quick Start</a>
                 <li><a href="#ecosystem">1.4 Ecosystem</a>
                 <li><a href="#upgrade">1.5 Upgrading</a>
             </ul>
        </li>
        <li><a href="#api">2. API</a>
              <ul>
                  <li><a href="#producerapi">2.1 Producer API</a>
                  <li><a href="#consumerapi">2.2 Consumer API</a>
                      <ul>
                          <li><a href="#highlevelconsumerapi">2.2.1 Old High Level Consumer API</a>
                          <li><a href="#simpleconsumerapi">2.2.2 Old Simple Consumer API</a>
                          <li><a href="#newconsumerapi">2.2.3 New Consumer API</a>
                      </ul>
              </ul>
        </li>
        <li><a href="#configuration">3. Configuration</a>
            <ul>
                <li><a href="#brokerconfigs">3.1 Broker Configs</a>
                <li><a href="#producerconfigs">3.2 Producer Configs</a>
                <li><a href="#consumerconfigs">3.3 Consumer Configs</a>
                    <ul>
                        <li><a href="#oldconsumerconfigs">3.3.1 Old Consumer Configs</a>
                        <li><a href="#newconsumerconfigs">3.3.2 New Consumer Configs</a>
                    </ul>
                <li><a href="#connectconfigs">3.4 Kafka Connect Configs</a>
            </ul>
        </li>
        <li><a href="#design">4. Design</a>
            <ul>
                 <li><a href="#majordesignelements">4.1 Motivation</a>
                 <li><a href="#persistence">4.2 Persistence</a>
                 <li><a href="#maximizingefficiency">4.3 Efficiency</a>
                 <li><a href="#theproducer">4.4 The Producer</a>
                 <li><a href="#theconsumer">4.5 The Consumer</a>
                 <li><a href="#semantics">4.6 Message Delivery Semantics</a>
                 <li><a href="#replication">4.7 Replication</a>
                 <li><a href="#compaction">4.8 Log Compaction</a>
                 <li><a href="#design_quotas">4.9 Quotas</a>
            </ul>
        </li>
        <li><a href="#implementation">5. Implementation</a>
            <ul>
                  <li><a href="#apidesign">5.1 API Design</a>
                  <li><a href="#networklayer">5.2 Network Layer</a>
                  <li><a href="#messages">5.3 Messages</a>
                  <li><a href="#messageformat">5.4 Message format</a>
                  <li><a href="#log">5.5 Log</a>
                  <li><a href="#distributionimpl">5.6 Distribution</a>
            </ul>
        </li>
        <li><a href="#operations">6. Operations</a>
            <ul>
                 <li><a href="#basic_ops">6.1 Basic Kafka Operations</a>
                    <ul>
                         <li><a href="#basic_ops_add_topic">Adding and removing topics</a>
                         <li><a href="#basic_ops_modify_topic">Modifying topics</a>
                         <li><a href="#basic_ops_restarting">Graceful shutdown</a>
                         <li><a href="#basic_ops_leader_balancing">Balancing leadership</a>
                         <li><a href="#basic_ops_consumer_lag">Checking consumer position</a>
                         <li><a href="#basic_ops_mirror_maker">Mirroring data between clusters</a>
                         <li><a href="#basic_ops_cluster_expansion">Expanding your cluster</a>
                         <li><a href="#basic_ops_decommissioning_brokers">Decommissioning brokers</a>
                         <li><a href="#basic_ops_increase_replication_factor">Increasing replication factor</a>
                    </ul>
                 <li><a href="#datacenters">6.2 Datacenters</a>
                 <li><a href="#config">6.3 Important Configs</a>
                     <ul>
                         <li><a href="#serverconfig">Important Server Configs</a>
                         <li><a href="#clientconfig">Important Client Configs</a>
                         <li><a href="#prodconfig">A Production Server Configs</a>
                     </ul>
                   <li><a href="#java">6.4 Java Version</a>
                   <li><a href="#hwandos">6.5 Hardware and OS</a>
                    <ul>
                        <li><a href="#os">OS</a>
                        <li><a href="#diskandfs">Disks and Filesystems</a>
                        <li><a href="#appvsosflush">Application vs OS Flush Management</a>
                        <li><a href="#linuxflush">Linux Flush Behavior</a>
                        <li><a href="#ext4">Ext4 Notes</a>
                    </ul>
                  <li><a href="#monitoring">6.6 Monitoring</a>
                  <li><a href="#zk">6.7 ZooKeeper</a>
                    <ul>
                        <li><a href="#zkversion">Stable Version</a>
                        <li><a href="#zkops">Operationalization</a>
                    </ul>
            </ul>
        </li>
        <li><a href="#security">7. Security</a>
            <ul>
                <li><a href="#security_overview">7.1 Security Overview</a></li>
                <li><a href="#security_ssl">7.2 Encryption and Authentication using SSL</a></li>
                <li><a href="#security_sasl">7.3 Authentication using SASL</a></li>
                <li><a href="#security_authz">7.4 Authorization and ACLs</a></li>
                <li><a href="#zk_authz">7.5 ZooKeeper Authentication</a></li>
                <ul>
                    <li><a href="#zk_authz_new">New Clusters</a></li>
                    <li><a href="#zk_authz_migration">Migrating Clusters</a></li>
                    <li><a href="#zk_authz_ensemble">Migrating the ZooKeeper Ensemble</a></li>
                </ul>
            </ul>
        </li>
        <li><a href="#connect">8. Kafka Connect</a>
            <ul>
                <li><a href="#connect_overview">8.1 Overview</a></li>
                <li><a href="#connect_user">8.2 User Guide</a></li>
                <li><a href="#connect_development">8.3 Connector Development Guide</a></li>
            </ul>
        </li>
    </ul>

    <h2><a id="gettingStarted" href="#gettingStarted">1. Getting Started</a></h2>
    <!--#include virtual="introduction.html" -->
    <!--#include virtual="uses.html" -->
    <!--#include virtual="quickstart.html" -->
    <!--#include virtual="ecosystem.html" -->
    <!--#include virtual="upgrade.html" -->

    <h2><a id="api" href="#api">2. API</a></h2>

    <!--#include virtual="api.html" -->

    <h2><a id="configuration" href="#configuration">3. Configuration</a></h2>

    <!--#include virtual="configuration.html" -->

    <h2><a id="design" href="#design">4. Design</a></h2>

    <!--#include virtual="design.html" -->

    <h2><a id="implementation" href="#implementation">5. Implementation</a></h2>

    <!--#include virtual="implementation.html" -->

    <h2><a id="operations" href="#operations">6. Operations</a></h2>

    <!--#include virtual="ops.html" -->

    <h2><a id="security" href="#security">7. Security</a></h2>
    <!--#include virtual="security.html" -->

    <h2><a id="connect" href="#connect">8. Kafka Connect</a></h2>
    <!--#include virtual="connect.html" -->

<!--#include virtual="../includes/_footer.htm" -->
