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

<script><!--#include virtual="js/templateData.js" --></script>

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

<div class="content">
	<!--#include virtual="../includes/_nav.htm" -->
	<div class="right">
		<!--#include virtual="../includes/_docs_banner.htm" -->
    <h1>Documentation</h1>
    <h3>Kafka 0.10.1 Documentation</h3>
    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>, <a href="/090/documentation.html">0.9.0.X</a>, <a href="/0100/documentation.html">0.10.0.X</a>.
    </ul>

    <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. APIs</a>
              <ul>
                  <li><a href="#producerapi">2.1 Producer API</a>
                  <li><a href="#consumerapi">2.2 Consumer API</a>
                  <li><a href="#streamsapi">2.3 Streams API</a>
    			  <li><a href="#connectapi">2.4 Connect API</a>
    			  <li><a href="#legacyapis">2.5 Legacy APIs</a>
              </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="#newconsumerconfigs">3.3.1 New Consumer Configs</a>
                        <li><a href="#oldconsumerconfigs">3.3.2 Old Consumer Configs</a>
                    </ul>
                <li><a href="#connectconfigs">3.4 Kafka Connect Configs</a>
                <li><a href="#streamsconfigs">3.5 Kafka Streams 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="#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="#security_rolling_upgrade">7.5 Incorporating Security Features in a Running Cluster</a></li>
                <li><a href="#zk_authz">7.6 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>
        <li><a href="/0101/documentation/streams">9. Kafka Streams</a>
            <ul>
                <li><a href="/0101/documentation/streams#streams_overview">9.1 Overview</a></li>
                <li><a href="/0101/documentation/streams#streams_developer">9.2 Developer Guide</a></li>
                <ul>
                    <li><a href="/0101/documentation/streams#streams_concepts">Core Concepts</a></li>
                    <li><a href="/0101/documentation/streams#streams_processor">Low-Level Processor API</a></li>
                    <li><a href="/0101/documentation/streams#streams_dsl">High-Level Streams DSL</a></li>
                </ul>
            </ul>
        </li>
    </ul>

    <h2><a id="gettingStarted" href="#gettingStarted">1. Getting Started</a></h2>
      <h3><a id="introduction" href="#introduction">1.1 Introduction</a></h3>
      <!--#include virtual="introduction.html" -->
      <h3><a id="uses" href="#uses">1.2 Use Cases</a></h3>
      <!--#include virtual="uses.html" -->
      <h3><a id="quickstart" href="#quickstart">1.3 Quick Start</a></h3>
      <!--#include virtual="quickstart.html" -->
      <h3><a id="ecosystem" href="#ecosystem">1.4 Ecosystem</a></h3>
      <!--#include virtual="ecosystem.html" -->
      <h3><a id="upgrade" href="#upgrade">1.5 Upgrading From Previous Versions</a></h3>
      <!--#include virtual="upgrade.html" -->

    <h2><a id="api" href="#api">2. APIs</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" -->

    <h2><a id="streams" href="/0101/documentation/streams">9. Kafka Streams</a></h2>
    <p>Kafka Streams is a client library for processing and analyzing data stored in Kafka and either write the resulting data back to Kafka or send the final output to an external system. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simple yet efficient management of application state.</p> 
    <p>Kafka Streams has a <b>low barrier to entry</b>: You can quickly write and run a small-scale proof-of-concept on a single machine; and you only need to run additional instances of your application on multiple machines to scale up to high-volume production workloads. Kafka Streams transparently handles the load balancing of multiple instances of the same application by leveraging Kafka's parallelism model.</p>
    <p><a href="/0101/documentation/streams">learn more about streams</a></p>

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