<!--
 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>
                    <ul>
                        <li><a href="#sourceconnectconfigs">Source Connector Configs</a>
                        <li><a href="#sinkconnectconfigs">Sink Connector Configs</a>
                    </ul>
                <li><a href="#streamsconfigs">3.6 Kafka Streams Configs</a>
                <li><a href="#adminclientconfigs">3.7 AdminClient Configs</a>
                <li><a href="#systemproperties">3.8 System Properties</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>
                        <li><a href="#basic_ops_modify_topic">Modifying topics</a></li>
                        <li><a href="#basic_ops_restarting">Graceful shutdown</a></li>
                        <li><a href="#basic_ops_leader_balancing">Balancing leadership</a></li>
                        <li><a href="#basic_ops_racks">Balancing Replicas Across Racks</a></li>
                        <li><a href="#basic_ops_mirror_maker">Mirroring data between clusters</a></li>
                        <li><a href="#basic_ops_consumer_lag">Checking consumer position</a></li>
                        <li><a href="#basic_ops_consumer_group">Managing Consumer Groups</a></li>
                        <li><a href="#basic_ops_cluster_expansion">Expanding your cluster</a></li>
                        <li><a href="#basic_ops_decommissioning_brokers">Decommissioning brokers</a></li>
                        <li><a href="#basic_ops_increase_replication_factor">Increasing replication factor</a></li>
                        <li><a href="#rep-throttle">Limiting Bandwidth Usage during Data Migration</a></li>
                        <li><a href="#quotas">Setting quotas</a></li>
                    </ul>
                </li>
                <li><a href="#datacenters">6.2 Datacenters</a></li>
                <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>
                <li><a href="#multitenancy">6.4 Multi-Tenancy</a></li>
                    <ul>
                        <li><a href="#multitenancy-overview">Multi-Tenancy Overview</a></li>
                        <li><a href="#multitenancy-topic-naming">Creating User Spaces (Namespaces)</a></li>
                        <li><a href="#multitenancy-topic-configs">Configuring Topics</a></li>
                        <li><a href="#multitenancy-security">Securing Clusters and Topics</a></li>
                        <li><a href="#multitenancy-isolation">Isolating Tenants</a></li>
                        <li><a href="#multitenancy-monitoring">Monitoring and Metering</a></li>
                        <li><a href="#multitenancy-georeplication">Multi-Tenancy and Geo-Replication</a></li>
                        <li><a href="#multitenancy-more">Further considerations</a></li>
                    </ul>
                </li>
                <li><a href="#config">6.5 Important Configs</a>
                    <ul>
                        <li><a href="#clientconfig">Important Client Configs</a>
                        <li><a href="#prodconfig">A Production Server Configs</a>
                    </ul>
                </li>
                <li><a href="#java">6.6 Java Version</a>
                <li><a href="#hwandos">6.7 Hardware and OS</a>
                    <ul>
                        <li><a href="#os">OS</a></li>
                        <li><a href="#diskandfs">Disks and Filesystems</a></li>
                        <li><a href="#appvsosflush">Application vs OS Flush Management</a></li>
                        <li><a href="#linuxflush">Linux Flush Behavior</a></li>
                        <li><a href="#filesystems">Filesystem Selection</a></li>
                        <li><a href="#replace_disk">Replace KRaft Controller Disk</a></li>
                    </ul>
                </li>
                <li><a href="#monitoring">6.8 Monitoring</a>
                    <ul>
                        <li><a href="#remote_jmx">Security Considerations for Remote Monitoring using JMX</a></li>
                        <li><a href="#kraft_monitoring">KRaft Monitoring</a></li>
                        <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>
                <li><a href="#zk">6.9 ZooKeeper</a>
                    <ul>
                        <li><a href="#zkversion">Stable Version</a>
                        <li><a href="#zkops">Operationalization</a>
                    </ul>
                </li>
                <li><a href="#kraft">6.10 KRaft</a>
                    <ul>
                        <li><a href="#kraft_config">Configuration</a></li>
                        <li><a href="#kraft_storage">Storage Tool</a></li>
                        <li><a href="#kraft_debug">Debugging</a></li>
                        <li><a href="#kraft_deployment">Deploying Considerations</a></li>
                        <li><a href="#kraft_missing">Missing Features</a></li>
                    </ul>
                </li>
            </ul>
        </li>
        <li><a href="#security">7. Security</a>
            <ul>
                <li><a href="#security_overview">7.1 Security Overview</a></li>
                <li><a href="#listener_configuration">7.2 Listener Configuration</a></li>
                <li><a href="#security_ssl">7.3 Encryption and Authentication using SSL</a></li>
                <li><a href="#security_sasl">7.4 Authentication using SASL</a></li>
                <li><a href="#security_authz">7.5 Authorization and ACLs</a></li>
                <li><a href="#security_rolling_upgrade">7.6 Incorporating Security Features in a Running Cluster</a></li>
                <li><a href="#zk_authz">7.7 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.8 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>
                    <li><a href="#connect_errorreporting">Error Reporting in Connect</a></li>
                    <li><a href="#connect_exactlyonce">Exactly-once support</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>
