<!--
 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 documentation documentation--current">
 <!--#include virtual="../includes/_nav.htm" -->
  <div class="toc-handle-container">
    <div class="toc-handle">&lt;</div>
  </div>
  <div class="docs-nav">
    <!--#include virtual="toc.html" -->
  </div>
  <div class="right">
    <!--//#include virtual="../includes/_docs_banner.htm" -->
    
    <h1>Documentation</h1>
    <h3>Kafka 3.7 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>, 
                    <a href="/0101/documentation.html">0.10.1.X</a>, 
                    <a href="/0102/documentation.html">0.10.2.X</a>, 
                    <a href="/0110/documentation.html">0.11.0.X</a>, 
                    <a href="/10/documentation.html">1.0.X</a>, 
                    <a href="/11/documentation.html">1.1.X</a>, 
                    <a href="/20/documentation.html">2.0.X</a>, 
                    <a href="/21/documentation.html">2.1.X</a>, 
                    <a href="/22/documentation.html">2.2.X</a>, 
                    <a href="/23/documentation.html">2.3.X</a>, 
                    <a href="/24/documentation.html">2.4.X</a>, 
                    <a href="/25/documentation.html">2.5.X</a>, 
                    <a href="/26/documentation.html">2.6.X</a>, 
                    <a href="/27/documentation.html">2.7.X</a>,
                    <a href="/28/documentation.html">2.8.X</a>,
                    <a href="/30/documentation.html">3.0.X</a>.
                    <a href="/31/documentation.html">3.1.X</a>.
                    <a href="/32/documentation.html">3.2.X</a>.
                    <a href="/33/documentation.html">3.3.X</a>.
                    <a href="/34/documentation.html">3.4.X</a>.
                    <a href="/35/documentation.html">3.5.X</a>.
                    <a href="/36/documentation.html">3.6.X</a>.

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

    <h2 class="anchor-heading"><a id="api" class="anchor-link"></a><a href="#api">2. APIs</a></h2>

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

    <h2 class="anchor-heading"><a id="configuration" class="anchor-link"></a><a href="#configuration">3. Configuration</a></h2>

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

    <h2 class="anchor-heading"><a id="design" class="anchor-link"></a><a href="#design">4. Design</a></h2>

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

    <h2 class="anchor-heading"><a id="implementation" class="anchor-link"></a><a href="#implementation">5. Implementation</a></h2>

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

    <h2 class="anchor-heading"><a id="operations" class="anchor-link"></a><a href="#operations">6. Operations</a></h2>

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

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

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

    <h2><a id="streams" href="/documentation/streams">9. Kafka Streams</a></h2>
    <p>
        Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, exactly-once processing semantics 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>Learn More about Kafka Streams read <a href="/documentation/streams">this</a> Section.</p>

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