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

<script id="toc-template" type="text/x-handlebars-template">

    <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="/{{version}}/documentation/streams">2.3 Streams API</a>
                <li><a href="#connectapi">2.4 Connect API</a>
                <li><a href="#adminapi">2.5 Admin API</a>
            </ul>
        </li>
        <li><a href="#configuration">3. Configuration</a>
            <ul>
                <li><a href="#brokerconfigs">3.1 Broker Configs</a>
                <li><a href="#topicconfigs">3.2 Topic Configs</a>
                <li><a href="#producerconfigs">3.3 Producer Configs</a>
                <li><a href="#consumerconfigs">3.4 Consumer Configs</a>
                <li><a href="#connectconfigs">3.5 Kafka Connect Configs</a>
                <li><a href="#streamsconfigs">3.6 Kafka Streams Configs</a>
                <li><a href="#adminclientconfigs">3.7 AdminClient 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="#networklayer">5.1 Network Layer</a>
                <li><a href="#messages">5.2 Messages</a>
                <li><a href="#messageformat">5.3 Message format</a>
                <li><a href="#log">5.4 Log</a>
                <li><a href="#distributionimpl">5.5 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="#georeplication">6.3 Geo-Replication (Cross-Cluster Data Mirroring)</a></li>
                    <ul>
			<li><a href="#georeplication-overview">Geo-Replication Overview</a></li>
			<li><a href="#georeplication-flows">What Are Replication Flows</a></li>
			<li><a href="#georeplication-mirrormaker">Configuring Geo-Replication</a></li>
			<li><a href="#georeplication-starting">Starting Geo-Replication</a></li>
			<li><a href="#georeplication-stopping">Stopping Geo-Replication</a></li>
			<li><a href="#georeplication-apply-config-changes">Applying Configuration Changes</a></li>
			<li><a href="#georeplication-monitoring">Monitoring Geo-Replication</a></li>
                    </ul>
                <li><a href="#config">6.4 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.5 Java Version</a>
                <li><a href="#hwandos">6.6 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.7 Monitoring</a>
                    <ul>
                        <li><a href="#selector_monitoring">Selector Monitoring</a></li>
                        <li><a href="#common_node_monitoring">Common Node Monitoring</a></li>
                        <li><a href="#producer_monitoring">Producer Monitoring</a></li>
                        <li><a href="#consumer_monitoring">Consumer Monitoring</a></li>
                        <li><a href="#connect_monitoring">Connect Monitoring</a></li>
                        <li><a href="#kafka_streams_monitoring">Streams Monitoring</a></li>
                        <li><a href="#others_monitoring">Others</a></li>
                    </ul>
                <li><a href="#zk">6.8 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>
                    <ul>
                        <li><a href="#zk_authz_new_sasl">ZooKeeper SASL Authentication</a></li>
                        <li><a href="#zk_authz_new_mtls">ZooKeeper Mutual TLS Authentication</a></li>
                    </ul>
                    <li><a href="#zk_authz_migration">Migrating Clusters</a></li>
                    <li><a href="#zk_authz_ensemble">Migrating the ZooKeeper Ensemble</a></li>
                    <li><a href="#zk_authz_quorum">ZooKeeper Quorum Mutual TLS Authentication</a></li>
                </ul>
                <li><a href="#zk_encryption">7.7 ZooKeeper Encryption</a></li>
            </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>
                <ul>
                    <li><a href="#connect_running">Running Kafka Connect</a></li>
                    <li><a href="#connect_configuring">Configuring Connectors</a></li>
                    <li><a href="#connect_transforms">Transformations</a></li>
                    <li><a href="#connect_rest">REST API</a></li>
                </ul>
                <li><a href="#connect_development">8.3 Connector Development Guide</a></li>
            </ul>
        </li>
        <li><a href="/{{version}}/documentation/streams">9. Kafka Streams</a>
            <ul>
                <li><a href="/{{version}}/documentation/streams/quickstart">9.1 Play with a Streams Application</a></li>
                <li><a href="/{{version}}/documentation/streams/tutorial">9.2 Write your own Streams Applications</a></li>
                <li><a href="/{{version}}/documentation/streams/developer-guide">9.3 Developer Manual</a></li>
                <li><a href="/{{version}}/documentation/streams/core-concepts">9.4 Core Concepts</a></li>
                <li><a href="/{{version}}/documentation/streams/architecture">9.5 Architecture</a></li>
                <li><a href="/{{version}}/documentation/streams/upgrade-guide">9.6 Upgrade Guide</a></li>
            </ul>
        </li>
    </ul>

</script>

<div class="p-toc"></div>
