<!--
 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>
                <li><a href="#zk2kraft-summary">1.6 KRaft vs ZooKeeper</a>
                <li><a href="#compatibility-summary">1.7 Compatibility</a>
                <li><a href="#docker">1.8 Docker</a>
            </ul>
        
        <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="#shareconsumerapi">2.3 Share Consumer API (Preview)</a>
                <li><a href="#streamsapi">2.4 Streams API</a>
                <li><a href="#connectapi">2.5 Connect API</a>
                <li><a href="#adminapi">2.6 Admin API</a>
            </ul>
        
        <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="#groupconfigs">3.3 Group Configs</a></li>
                <li><a href="#producerconfigs">3.4 Producer Configs</a>
                <li><a href="#consumerconfigs">3.5 Consumer Configs</a>
                <li><a href="#connectconfigs">3.6 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.7 Kafka Streams Configs</a>
                <li><a href="#adminclientconfigs">3.8 AdminClient Configs</a>
                <li><a href="#mirrormakerconfigs">3.9 MirrorMaker Configs</a>
                <li><a href="#systemproperties">3.10 System Properties</a>
                <li><a href="#tieredstorageconfigs">3.11 Tiered Storage Configs</a>
                <li><a href="#config_providers">3.12 Configuration Providers</a>
                    <ul>
                        <li><a href="#using_config_providers">Using Configuration Providers</a>
                        <li><a href="#directory_config_provider">DirectoryConfigProvider</a>
                        <li><a href="#env_var_config_provider">EnvVarConfigProvider</a>    
                        <li><a href="#file_config_provider">FileConfigProvider</a>
                        <li><a href="#ref_config_provider">Example: Referencing Files</a>     
                    </ul>    
            </ul>
        
        <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="#usingtransactions">4.7 Using Transactions</a>
                <li><a href="#sharegroups">4.8 Share Groups</a>
                <li><a href="#replication">4.9 Replication</a>
                <li><a href="#compaction">4.10 Log Compaction</a>
                <li><a href="#design_quotas">4.11 Quotas</a>
            </ul>
        
        <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><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_racks">Balancing replicas across racks</a>
                        <li><a href="#basic_ops_mirror_maker">Mirroring data between clusters</a>
                        <li><a href="#basic_ops_consumer_lag">Checking consumer position</a>
                        <li><a href="#basic_ops_groups">Managing groups</a>
                        <li><a href="#basic_ops_consumer_group">Managing consumer groups</a>
                        <li><a href="#basic_ops_share_group">Managing share groups</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>
                        <li><a href="#rep-throttle">Limiting bandwidth usage during data migration</a>
                        <li><a href="#quotas">Setting quotas</a>
                    </ul>
                
                <li><a href="#datacenters">6.2 Datacenters</a>
                <li><a href="#georeplication">6.3 Geo-Replication (Cross-Cluster Data Mirroring)</a>
                    <ul>
                        <li><a href="#georeplication-overview">Geo-Replication Overview</a>
                        <li><a href="#georeplication-flows">What Are Replication Flows</a>
                        <li><a href="#georeplication-mirrormaker">Configuring Geo-Replication</a>
                        <li><a href="#georeplication-starting">Starting Geo-Replication</a>
                        <li><a href="#georeplication-stopping">Stopping Geo-Replication</a>
                        <li><a href="#georeplication-apply-config-changes">Applying Configuration Changes</a>
                        <li><a href="#georeplication-monitoring">Monitoring Geo-Replication</a>
                    </ul>
                
                <li><a href="#multitenancy">6.4 Multi-Tenancy</a>
                    <ul>
                        <li><a href="#multitenancy-overview">Multi-Tenancy Overview</a>
                        <li><a href="#multitenancy-topic-naming">Creating User Spaces (Namespaces)</a>
                        <li><a href="#multitenancy-topic-configs">Configuring Topics</a>
                        <li><a href="#multitenancy-security">Securing Clusters and Topics</a>
                        <li><a href="#multitenancy-isolation">Isolating Tenants</a>
                        <li><a href="#multitenancy-monitoring">Monitoring and Metering</a>
                        <li><a href="#multitenancy-georeplication">Multi-Tenancy and Geo-Replication</a>
                        <li><a href="#multitenancy-more">Further considerations</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="#filesystems">Filesystem Selection</a>
                        <li><a href="#replace_disk">Replace KRaft Controller Disk</a>
                    </ul>
                
                <li><a href="#monitoring">6.7 Monitoring</a>
                    <ul>
                        <li><a href="#remote_jmx">Security Considerations for Remote Monitoring using JMX</a>
                        <li><a href="#group_coordinator_monitoring">Group Coordinator Monitoring</a>
                        <li><a href="#tiered_storage_monitoring">Tiered Storage Monitoring</a>
                        <li><a href="#kraft_monitoring">KRaft Monitoring</a>
                        <li><a href="#selector_monitoring">Selector Monitoring</a>
                        <li><a href="#common_node_monitoring">Common Node Monitoring</a>
                        <li><a href="#producer_monitoring">Producer Monitoring</a>
                        <li><a href="#consumer_monitoring">Consumer Monitoring</a>
                        <li><a href="#connect_monitoring">Connect Monitoring</a>
                        <li><a href="#kafka_streams_monitoring">Streams Monitoring</a>
                        <li><a href="#others_monitoring">Others</a>
                    </ul>
                
                <li><a href="#kraft">6.8 KRaft</a>
                    <ul>
                        <li><a href="#kraft_config">Configuration</a>
                        <li><a href="#kraft_upgrade">Upgrade</a>
                        <li><a href="#kraft_nodes">Provisioning Nodes</a>
                        <li><a href="#kraft_reconfig">Controller membership changes</a>
                        <li><a href="#kraft_debug">Debugging</a>
                        <li><a href="#kraft_deployment">Deploying Considerations</a>
                        <li><a href="#kraft_zk_migration">ZooKeeper to KRaft Migration</a>
                    </ul>
                
                <li><a href="#tiered_storage">6.9 Tiered Storage</a>
                    <ul>
                        <li><a href="#tiered_storage_overview">Tiered Storage Overview</a>
                        <li><a href="#tiered_storage_config">Configuration</a>
                        <li><a href="#tiered_storage_config_ex">Quick Start Example</a>
                        <li><a href="#tiered_storage_limitation">Limitations</a>
                    </ul>
                <li><a href="#consumer_rebalance_protocol">6.10 Consumer Rebalance Protocol</a>
                <li><a href="#transaction_protocol">6.11 Transaction Protocol</a>
                <li><a href="#eligible_leader_replicas">6.12 Eligible Leader Replicas</a>
            </ul>
        
        <li><a href="#security">7. Security</a>
            <ul>
                <li><a href="#security_overview">7.1 Security Overview</a>
                <li><a href="#listener_configuration">7.2 Listener Configuration</a>
                <li><a href="#security_ssl">7.3 Encryption and Authentication using SSL</a>
                <li><a href="#security_sasl">7.4 Authentication using SASL</a>
                <li><a href="#security_authz">7.5 Authorization and ACLs</a>
                <li><a href="#security_rolling_upgrade">7.6 Incorporating Security Features in a Running Cluster</a>
            </ul>
        
        <li><a href="#connect">8. Kafka Connect</a>
            <ul>
                <li><a href="#connect_overview">8.1 Overview</a>
                <li><a href="#connect_user">8.2 User Guide</a>
                    <ul>
                        <li><a href="#connect_running">Running Kafka Connect</a>
                        <li><a href="#connect_configuring">Configuring Connectors</a>
                        <li><a href="#connect_transforms">Transformations</a>
                        <li><a href="#connect_rest">REST API</a>
                        <li><a href="#connect_errorreporting">Error Reporting in Connect</a>
                        <li><a href="#connect_exactlyonce">Exactly-once support</a>
                        <li><a href="#connect_plugindiscovery">Plugin Discovery</a>
                    </ul>
                
                <li><a href="#connect_development">8.3 Connector Development Guide</a>
                    <ul>
                        <li><a href="#connect_concepts">Core Concepts and APIs</a>
                        <li><a href="#connect_developing">Developing a Simple Connector</a>
                        <li><a href="#connect_dynamicio">Dynamic Input/Output Streams</a>
                        <li><a href="#connect_configs">Configuration Validation</a>
                        <li><a href="#connect_schemas">Working with Schemas</a>
                    </ul>
                
                <li><a href="#connect_administration">8.4 Administration</a>
            </ul>
        
        <li><a href="#streams">9. Kafka Streams</a>
            <ul>
                <li><a href="/{{version}}/documentation/streams/quickstart">9.1 Play with a Streams Application</a>
                <li><a href="/{{version}}/documentation/streams/tutorial">9.2 Write your own Streams Applications</a>
                <li><a href="/{{version}}/documentation/streams/developer-guide">9.3 Developer Manual</a>
                <li><a href="/{{version}}/documentation/streams/core-concepts">9.4 Core Concepts</a>
                <li><a href="/{{version}}/documentation/streams/architecture">9.5 Architecture</a>
                <li><a href="/{{version}}/documentation/streams/upgrade-guide">9.6 Upgrade Guide</a>
            </ul>
        
    </ul>

</script>

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