{"id":105508,"date":"2025-03-12T12:16:10","date_gmt":"2025-03-12T04:16:10","guid":{"rendered":"https:\/\/version-2.com\/?p=105508"},"modified":"2025-03-24T12:40:28","modified_gmt":"2025-03-24T04:40:28","slug":"running-kafka-without-zookeeper-in-kraft-mode","status":"publish","type":"post","link":"https:\/\/version-2.com\/en\/2025\/03\/running-kafka-without-zookeeper-in-kraft-mode\/","title":{"rendered":"Running Kafka Without ZooKeeper in KRaft Mode"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"105508\" class=\"elementor elementor-105508\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-71ae5294 post-content elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"71ae5294\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[{&quot;jet_parallax_layout_image&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;_id&quot;:&quot;c4a899f&quot;,&quot;jet_parallax_layout_image_tablet&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;jet_parallax_layout_image_mobile&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;jet_parallax_layout_speed&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:50,&quot;sizes&quot;:[]},&quot;jet_parallax_layout_type&quot;:&quot;scroll&quot;,&quot;jet_parallax_layout_direction&quot;:&quot;1&quot;,&quot;jet_parallax_layout_fx_direction&quot;:null,&quot;jet_parallax_layout_z_index&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_x&quot;:50,&quot;jet_parallax_layout_bg_x_tablet&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_x_mobile&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_y&quot;:50,&quot;jet_parallax_layout_bg_y_tablet&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_y_mobile&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_size&quot;:&quot;auto&quot;,&quot;jet_parallax_layout_bg_size_tablet&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_size_mobile&quot;:&quot;&quot;,&quot;jet_parallax_layout_animation_prop&quot;:&quot;transform&quot;,&quot;jet_parallax_layout_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;]}]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1e9119cd\" data-id=\"1e9119cd\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4f04f8cb elementor-widget elementor-widget-text-editor\" data-id=\"4f04f8cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full\" src=\"https:\/\/www.openlogic.com\/sites\/default\/files\/image\/2022-11\/image-blog-openlogic-kafka-raft-mode-1.png\" width=\"600\" height=\"400\" \/><\/p><div class=\"toc-filter\"><p>ZooKeeper will be completely gone in the next major Apache Kafka release (<a href=\"https:\/\/www.openlogic.com\/blog\/upgrade-kafka-4-planning\">Kafka 4<\/a>), and replaced by Kafka Raft, or KRaft mode. Many developers are excited about this change, but it will impact teams currently running <a href=\"https:\/\/www.openlogic.com\/blog\/using-kafka-zookeeper\">Kafka with ZooKeeper<\/a> who need to determine an upgrade path once ZooKeeper is no longer supported.<\/p><p>In this blog, our expert explains what KRaft mode is and how Raft implementations differ from ZooKeeper-based deployments, what to consider when planning your KRaft migration, and how your environment will look different when you&#8217;re running Kafka without ZooKeeper.<\/p><p><em>Note: This blog was originally published in 2022 and was updated and revised in 2025 to reflect the latest developments.<\/em><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-back-to-top.html.twig' --><!-- THEME DEBUG --><!-- THEME HOOK: 'toc_header' --><!-- BEGIN OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-header.html.twig' --><\/p><p>\u00a0<\/p><h2 id=\"what-is-kafka-raft-01\">What Is Kafka Raft (KRaft) Mode?<\/h2><p><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-header.html.twig' --><\/p><blockquote><p>Kafka Raft (which loosely stands for Reliable, Replicated, Redundant, And Fault Tolerant) or KRaft, is Kafka\u2019s implementation of the Raft consensus algorithm.<\/p><\/blockquote><p>Created as an alternative to the Paxos family of algorithms, the Raft Consensus protocol is meant to be a simpler consensus implementation with the goal of being easier to understand than Paxos. Both Paxos and Raft operate in similar manner under normal stable operating conditions, and both protocols accomplish the following:<\/p><ul><li>Leader writes operation to its\u00a0log and requests following servers to do the same thing<\/li><li>The operation is marked as \u201ccommited\u201d once a majority of servers acknowledge the operation<\/li><\/ul><p>This results in a consensus-based change to the state machine, or in this specific case, the Kafka cluster.<\/p><p>The main difference between Raft and Paxos, however, is when operations are not normal and new leader must be elected. Both algorithms will guarantee that the new leader\u2019s log will contain the most up-to-date commits, but how they accomplish this process differs.<\/p><p>In Paxos, the leader election contains not only the proposal and subsequent vote, but also must contain any missing log entries the candidate is missing. Followers in Paxos implementations can vote for any candidate and once the candidate is elected as leader, the new leader will utilize this data to update its log to maintain currency.<\/p><p>In Raft, on the other hand, followers will only vote for a candidate if the candidate\u2019s log is the at least as up to date as the follower\u2019s log. This means only the most up-to-date candidate will be elected as leader. Ultimately, both protocols are remarkably similar in their approach to solving the consensus problem. However, with Raft making some base assumptions about the data, namely the order of commits in the log, we can see improvements in election efficiency in Raft.<\/p><p>What does this mean in regards to Kafka? From the protocol side of things, not much. ZooKeeper utilizes a proprietary consensus protocol called ZAB (ZooKeeper Atomic Broadcast) that is much more focused on total ordering of commits to the change log. This focus on commit order makes Raft consensus fit quite well into the Kafka ecosystem.<\/p><p>That said, changes from an infrastructure perspective will be quite noticeable. With each broker having the Kraft logic incorporated into the base code, <strong>ZooKeeper nodes will no longer be part of the Kafka infrastructure<\/strong>. Note that this doesn\u2019t necessarily mean less servers in the production environment \u2014 more on that later.<\/p><p>\u00a0<\/p><h3 id=\"why-kraft-replacing-zookeeper\">Why Is Kafka Raft Replacing ZooKeeper?<\/h3><p>To understand why the Kafka community leadership decided to make this move away from ZooKeeper, we can look directly at <a href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Managed+Metadata+Quorum\">KIP-500<\/a> for their reasoning. In short, this move was meant to reduce complexity and handle cluster metadata in a more robust fashion. Removing the requirement for ZooKeeper\u00a0means there is no longer a need to deploy two distinctly different distributed systems. ZooKeeper has different deployment patterns, management tools, and configuration syntax when compared to Kafka. Unifying the functionality to single system will reduce configuration errors and overall operational complexity.<\/p><p>In addition to simpler operations, treating the metadata as its own event stream means that a single number, an offset, can be used to describe a cluster member&#8217;s position and be quickly brought up to date. This in effect applies the same principles used for producers and consumers to the Kafka cluster members themselves.<\/p><blockquote><h3>Get the Decision Maker&#8217;s Guide to Apache Kafka<\/h3><p>This white paper has everything you need to master Kafka&#8217;s complexity, from partition strategies and security best practices to tips for running Kafka on K8s.<\/p><p><a title=\"https:\/\/www.openlogic.com\/talk-to-expert\" href=\"https:\/\/www.openlogic.com\/resources\/decision-makers-guide-apache-kafka\"><span class=\"btn--blue-default\">DownLoad Guide<\/span><\/a><\/p><\/blockquote><p><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-back-to-top.html.twig' --><!-- THEME DEBUG --><!-- THEME HOOK: 'toc_header' --><!-- BEGIN OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-header.html.twig' --><\/p><h2>\u00a0<\/h2><h2 id=\"kraft-vs-zookeeper\">KRaft vs. ZooKeeper<\/h2><p><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-header.html.twig' --><\/p><p>In a ZooKeeper-based Kafka deployment, the cluster consists of several broker nodes and a quorum of ZooKeeper nodes. In this environment, each change to the cluster metadata is treated as an isolated event, with no relationship to previous or future events. When state changes are pushed out to the cluster from the cluster controller, a.k.a. the broker in charge of tracking\/electing partition leadership, there is potential for some brokers to not receive all updates, or for stale updates to create race conditions as we\u2019ve seen in some larger Kafka installations. Ultimately, these failure points have the potential to leave brokers in divergent states.<\/p><p>While not entirely accurate, as all broker nodes can (and do) talk to ZooKeeper, the image below is a basic example of what that looks like:<\/p><p><!-- THEME DEBUG --><!-- THEME HOOK: 'media' --><!-- FILE NAME SUGGESTIONS: \u25aa\ufe0f media--source-image.html.twig \u25aa\ufe0f media--image--embed.html.twig \u25aa\ufe0f media--image.html.twig \u25aa\ufe0f media--embed.html.twig \u2705 media.html.twig --><!-- BEGIN OUTPUT from 'themes\/contrib\/classy\/templates\/content\/media.html.twig' --><\/p><article class=\"media media--type-image media--view-mode-embed\" data-embed-button=\"image_embed\" data-entity-embed-display=\"view_mode:media.embed\" data-entity-embed-display-settings=\"\" data-langcode=\"en\"><!-- THEME DEBUG --><!-- THEME HOOK: 'field' --><!-- FILE NAME SUGGESTIONS: \u25aa\ufe0f field--media--thumbnail--image.html.twig \u25aa\ufe0f field--media--thumbnail.html.twig \u25aa\ufe0f field--media--image.html.twig \u25aa\ufe0f field--thumbnail.html.twig \u25aa\ufe0f field--image.html.twig \u2705 field.html.twig --><!-- BEGIN OUTPUT from 'themes\/custom\/themekit\/templates\/field\/field.html.twig' --><div class=\"field field--name-thumbnail field--type-image field--label-hidden field__item\"><img decoding=\"async\" class=\"alignnone size-full\" src=\"https:\/\/www.openlogic.com\/sites\/default\/files\/image\/2022-12\/kafka-raft-2.jpg\" width=\"500\" height=\"500\" \/><br \/><!-- END OUTPUT from 'themes\/custom\/themekit\/templates\/field\/image.html.twig' --><!-- END OUTPUT from 'themes\/contrib\/classy\/templates\/field\/image-formatter.html.twig' --><\/div><p><!-- END OUTPUT from 'themes\/custom\/themekit\/templates\/field\/field.html.twig' --><\/p><\/article><p><!-- END OUTPUT from 'themes\/contrib\/classy\/templates\/content\/media.html.twig' --><\/p><p>In contrast, the metadata in KRaft is stored within Kafka itself and ZooKeeper is effectively replaced by a quorum of Kafka controllers. The controller nodes comprise a raft quorum to elect the active controller that manages the metadata partition. This log contains everything that used to be found ZooKeeper: topic, partition, ISRs, configuration data, etc. will all be located in this metadata partition.<\/p><p>Using the Raft algorithm controller nodes will elect the leader without the use of an external system like ZooKeeper. The leader, or active controller, will be the partition leader for the metadata partition and will handle all RPCs from the brokers.<\/p><p><a href=\"https:\/\/www.openlogic.com\/blog\/kafka-partitions\">Learn more about Kafka partitions &gt;&gt;<\/a><\/p><p>The diagram below is a logical representation of the new cluster environment implementation using KRaft:<\/p><p><!-- THEME DEBUG --><!-- THEME HOOK: 'media' --><!-- FILE NAME SUGGESTIONS: \u25aa\ufe0f media--source-image.html.twig \u25aa\ufe0f media--image--embed.html.twig \u25aa\ufe0f media--image.html.twig \u25aa\ufe0f media--embed.html.twig \u2705 media.html.twig --><!-- BEGIN OUTPUT from 'themes\/contrib\/classy\/templates\/content\/media.html.twig' --><\/p><article class=\"media media--type-image media--view-mode-embed\" data-embed-button=\"image_embed\" data-entity-embed-display=\"view_mode:media.embed\" data-entity-embed-display-settings=\"\" data-langcode=\"en\"><!-- THEME DEBUG --><!-- THEME HOOK: 'field' --><!-- FILE NAME SUGGESTIONS: \u25aa\ufe0f field--media--thumbnail--image.html.twig \u25aa\ufe0f field--media--thumbnail.html.twig \u25aa\ufe0f field--media--image.html.twig \u25aa\ufe0f field--thumbnail.html.twig \u25aa\ufe0f field--image.html.twig \u2705 field.html.twig --><!-- BEGIN OUTPUT from 'themes\/custom\/themekit\/templates\/field\/field.html.twig' --><div class=\"field field--name-thumbnail field--type-image field--label-hidden field__item\"><img decoding=\"async\" class=\"alignnone size-full\" src=\"https:\/\/www.openlogic.com\/sites\/default\/files\/image\/2022-12\/kafka-raft-1.jpg\" width=\"500\" height=\"500\" \/><br \/><!-- END OUTPUT from 'themes\/custom\/themekit\/templates\/field\/image.html.twig' --><!-- END OUTPUT from 'themes\/contrib\/classy\/templates\/field\/image-formatter.html.twig' --><\/div><p><!-- END OUTPUT from 'themes\/custom\/themekit\/templates\/field\/field.html.twig' --><\/p><\/article><p><!-- END OUTPUT from 'themes\/contrib\/classy\/templates\/content\/media.html.twig' --><\/p><p>Note in the diagram above there is no longer a double-sided arrow. This denotes another major difference in the two environments: Instead of the controller sending updates to the brokers, controllers fetch the metadata via a MetadataFetch API. In similar fashion to a regular fetch request, the broker will track the offset of the latest update it fetched, requesting only newer updates from the active controller persisting that metadata to disk for faster startup times.<\/p><p>In most cases, the broker will only need to request the deltas of the metadata log. However, in cases where no data exists on a broker or a broker is too far out of sync, a full metadata set can be shipped. A broker will periodically request metadata and this request will act as a heartbeat as well.<\/p><p>Previously, when a broker entered or exited a cluster, this was kept track of in ZooKeeper, but now the broker status will be registered directly with the active controller. In a post-ZooKeeper world, cluster membership and metadata updates are tightly coupled. Failure to receive metadata updates will result in eviction from the cluster.<\/p><blockquote><h3>ZooKeeper Deprecation and Removal<\/h3><p>KRaft has been considered \u201cproduction ready\u201d since Kafka 3.3 and ZooKeeper was officially deprecated in <a href=\"https:\/\/www.openlogic.com\/blog\/apache-kafka-3-5-overview\">Kafka 3.5<\/a>. It will be removed completely in Kafka 4 and higher.<\/p><p>\u00a0<\/p><\/blockquote><p><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-back-to-top.html.twig' --><!-- THEME DEBUG --><!-- THEME HOOK: 'toc_header' --><!-- BEGIN OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-header.html.twig' --><\/p><h2 id=\"transition-from-zookeeper-01\">Running Kafka Without ZooKeeper<\/h2><p><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-header.html.twig' --><\/p><p>As organizations plan their migrations to KRaft environments, there are quite a few things to consider.\u00a0In a KRaft-based cluster, Kafka nodes can be run in one of three different modes know as process.role. The process.role can be set to broker, controller, or combined. In a production cluster, it is recommended that the combined process.role should be avoided\u00a0\u2014\u00a0in other words, having dedicated JVM resources assigned to brokers and controllers. So, as mentioned previously, doing away with ZooKeeper doesn\u2019t necessarily mean doing away with the compute resources in production. Using the combined process.role in develop or staging environments is perfectly acceptable.<\/p><p>Since we originally published this blog, several upgrades and changes to the KRaft implementation have been completed and released.\u00a0The list of caveats previously mentioned have largely been addressed, including:<\/p><ul><li><strong>Configuring SCRAM users via the administrative API<\/strong>: With the completion and implementation of <a href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-900%3A+KRaft+kafka-storage.sh+API+additions+to+support+SCRAM+for+Kafka+Brokers\" target=\"_blank\" rel=\"noopener\"><span class=\"s2\">KIP-900<\/span><\/a> in Kafka 3.5.0 for inter-broker communications, the kafka-storage tool can be used as a mechanism to configure SCRAM.<\/li><li><strong>Supporting JBOD configurations with multiple storage directories: <\/strong>JBOD support was introduced in 3.7 as an early access feature. With the completion of <a href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-858%3A+Handle+JBOD+broker+disk+failure+in+KRaft\" target=\"_blank\" rel=\"noopener\"><span class=\"s2\">KIP-858<\/span><\/a>\u00a0and its implementation in 3.8, that is no longer the case.<\/li><li><strong>Modifying certain dynamic configurations on the standalone KRaft controller: <\/strong>In early releases of Kafka KRaft, some configuration items could not be updated dynamically, but as far as we are aware, these have mostly been fixed.\u00a0 The \u201cmissing features\u201d verbiage should be removed with 4.0 (see conversation <a href=\"https:\/\/issues.apache.org\/jira\/browse\/KAFKA-18860\" target=\"_blank\" rel=\"noopener\"><span class=\"s2\">here<\/span><\/a>).<\/li><li><strong>Delegation tokens: <\/strong>KIP-900 also paved the way for \u201cdelegation token\u201d support.\u00a0 With the completion of <a href=\"https:\/\/issues.apache.org\/jira\/browse\/KAFKA-15219\" target=\"_blank\" rel=\"noopener\"><span class=\"s2\">KAFKA-15219<\/span><\/a> in 3.6, delegation tokens are now supported in KRaft mode.<\/li><\/ul><p><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-back-to-top.html.twig' --><!-- THEME DEBUG --><!-- THEME HOOK: 'toc_header' --><!-- BEGIN OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-header.html.twig' --><\/p><h2>\u00a0<\/h2><h2 id=\"final-thoughts-01\">KRaft Migration<\/h2><p><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-header.html.twig' --><\/p><p class=\"p1\">Although a fully-fledged and supported upgrade path has been implemented and can be used to move clusters from Zookeeper mode to KRaft mode, in-place upgrades generally should be avoided.\u00a0At OpenLogic, we typically recommend lift-and-shift style, blue-green deployments instead. However, given the complexity of some Kafka clusters, having an official migration path is very much a welcome tool in the tool belt.<\/p><p class=\"p1\">While detailing the KRaft migration process would require an entire series of blog posts,\u00a0you can find an overview of the process in the Kafka documentation <a href=\"https:\/\/kafka.apache.org\/documentation\/#kraft_zk_migration\" target=\"_blank\" rel=\"noopener\"><span class=\"s1\">here<\/span><\/a>.\u00a0Of particular interest, though, is the requirement to upgrade to Kafka 3.9.0.\u00a0The metadata version cannot be upgraded during the migration, so inter.broker.protocol.version must be at 3.9 prior to the migration.\u00a0So, even if your organization isn\u2019t planning on migrating to KRaft anytime soon, it still makes sense to plan your upgrade to 3.9 sooner rather than later.<\/p><p><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-back-to-top.html.twig' --><!-- THEME DEBUG --><!-- THEME HOOK: 'toc_header' --><!-- BEGIN OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-header.html.twig' --><\/p><h2>\u00a0<\/h2><h2 id=\"final-thoughts-02\">KRaft Mode FAQ<\/h2><p><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-header.html.twig' --><\/p><h3>What benefits would my organization see, if any, from migrating to KRaft?<\/h3><p>The most basic benefit for any organization is of course being able to stay up to date on your software versions.\u00a0With ZooKeeper removal on the horizon, staying updated in ZK mode will eventually be impossible.\u00a0Also, organizations will see a decrease in cluster complexity as Kafka will handle metadata natively instead utilizing third-party software.<\/p><p>Lastly, organizations operating at the upper levels of cluster size will see a considerable increase in reliability and service continuity in KRaft mode.\u00a0While ZooKeeper is a reliable coordination service for a myriad of open source projects, whenever our customers with extremely large clusters (i.e. 30\/40+ brokers with thousands of partitions) are encountering severe issues, it often winds up being a ZooKeeper issue.<\/p><h3>\u00a0<\/h3><h3>If we migrate from ZooKeeper to KRaft, can we decommission our dedicated ZK hardware?<\/h3><p>Most likely, no, at least not in production.\u00a0Production KRaft controllers should be deployed in dedicated controller mode, so they will need dedicated compute just like ZooKeeper in production does.\u00a0However, non-production clusters can run in mixed mode.<\/p><p>\u00a0<\/p><h3>We have \u201cN\u201d number of ZooKeeper nodes; how many KRaft controller nodes should we use?<\/h3><p>At the very minimum organizations should deploy at least 3 controller nodes in production.\u00a0The system requirements for ZooKeeper and controller nodes are quite similar, though, so deploying the same number of controller nodes is a reasonable place to start.\u00a0Ultimately, a thorough load and performance testing protocol should be followed to validate this.<\/p><p>\u00a0<\/p><h3>If we are running Kafka via Strimzi Kubernetes operator, can we start using KRaft?<\/h3><p>Yes!\u00a0However, be aware that as of version 0.45.0, there some limitations with controller.\u00a0Currently, Strimzi continues to use static controller quorums, which means there are some limitations on using dynamic controller quorums.\u00a0More information can be found in the Strimzi documentation <a href=\"https:\/\/strimzi.io\/docs\/operators\/latest\/deploying#controller_scaling\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p><p>\u00a0<\/p><p><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-back-to-top.html.twig' --><!-- THEME DEBUG --><!-- THEME HOOK: 'toc_header' --><!-- BEGIN OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-header.html.twig' --><\/p><h2 id=\"final-thoughts-03\">Final Thoughts<\/h2><p><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-header.html.twig' --><\/p><p>For greenfield implementations, using KRaft should be a no-brainer, but for mature Kafka environments, migrating will be a complete rip and replace for your cluster, with all the complications that could follow. Creating a detailed migration plan, with blue\/green deployment strategies, is crucial in such cases. And if your team is lacking in Kafka expertise, seeking out external support to guide your migration would also be a good idea.<\/p><blockquote><h3>This Blog Was Written By One of Our Kafka Experts.<\/h3><p>OpenLogic Kafka experts can provide 24\/7 technical support, consultations, migration\/upgrade assistance, or even train your team.<\/p><p><a href=\"https:\/\/www.openlogic.com\/solutions\/middleware\/apache-kafka\"><span class=\"btn--blue-default\">Explore kafka Solutions\u00a0<\/span><\/a><!-- END OUTPUT from 'modules\/contrib\/toc_api\/templates\/toc-back-to-top.html.twig' --><\/p><\/blockquote><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1a1b0f4 elementor-widget elementor-widget-shortcode\" data-id=\"1a1b0f4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n\t\t<div data-elementor-type=\"page\" data-elementor-id=\"91828\" class=\"elementor elementor-91828\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6461a578 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"6461a578\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[{&quot;_id&quot;:&quot;c4f773e&quot;,&quot;jet_parallax_layout_image&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;jet_parallax_layout_image_tablet&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;jet_parallax_layout_image_mobile&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;jet_parallax_layout_speed&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:50,&quot;sizes&quot;:[]},&quot;jet_parallax_layout_type&quot;:&quot;scroll&quot;,&quot;jet_parallax_layout_direction&quot;:&quot;1&quot;,&quot;jet_parallax_layout_fx_direction&quot;:null,&quot;jet_parallax_layout_z_index&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_x&quot;:50,&quot;jet_parallax_layout_bg_x_tablet&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_x_mobile&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_y&quot;:50,&quot;jet_parallax_layout_bg_y_tablet&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_y_mobile&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_size&quot;:&quot;auto&quot;,&quot;jet_parallax_layout_bg_size_tablet&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_size_mobile&quot;:&quot;&quot;,&quot;jet_parallax_layout_animation_prop&quot;:&quot;transform&quot;,&quot;jet_parallax_layout_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;]}]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2f063c39\" data-id=\"2f063c39\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-14e1df2a elementor-widget elementor-widget-text-editor\" data-id=\"14e1df2a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>About Perforce <\/strong><br>The best run DevOps teams in the world choose Perforce. Perforce products are purpose-built to develop, build and maintain high-stakes applications. Companies can finally manage complexity, achieve speed without compromise, improve security and compliance, and run their DevOps toolchains with full integrity. With a global footprint spanning more than 80 countries and including over 75% of the Fortune 100, Perforce is trusted by the world\u2019s leading brands to deliver solutions to even the toughest challenges. Accelerate technology delivery, with no shortcuts.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\n\t\t<div data-elementor-type=\"page\" data-elementor-id=\"18103\" class=\"elementor elementor-18103\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-748947f elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"748947f\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[{&quot;jet_parallax_layout_image&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;_id&quot;:&quot;c4f773e&quot;,&quot;jet_parallax_layout_image_tablet&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;jet_parallax_layout_image_mobile&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;jet_parallax_layout_speed&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:50,&quot;sizes&quot;:[]},&quot;jet_parallax_layout_type&quot;:&quot;scroll&quot;,&quot;jet_parallax_layout_direction&quot;:&quot;1&quot;,&quot;jet_parallax_layout_fx_direction&quot;:null,&quot;jet_parallax_layout_z_index&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_x&quot;:50,&quot;jet_parallax_layout_bg_x_tablet&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_x_mobile&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_y&quot;:50,&quot;jet_parallax_layout_bg_y_tablet&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_y_mobile&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_size&quot;:&quot;auto&quot;,&quot;jet_parallax_layout_bg_size_tablet&quot;:&quot;&quot;,&quot;jet_parallax_layout_bg_size_mobile&quot;:&quot;&quot;,&quot;jet_parallax_layout_animation_prop&quot;:&quot;transform&quot;,&quot;jet_parallax_layout_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;]}]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7995c19\" data-id=\"7995c19\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a437045 elementor-widget elementor-widget-image-box\" data-id=\"a437045\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><div class=\"elementor-image-box-content\"><h3 class=\"elementor-image-box-title\">About Version 2 Digital<\/h3><p class=\"elementor-image-box-description\">Version 2 Digital is one of the most dynamic IT companies in Asia. The company distributes a wide range of IT products across various areas including cyber security, cloud, data protection, end points, infrastructures, system monitoring, storage, networking, business productivity and communication products.\n<br><br>\nThrough an extensive network of channels, point of sales, resellers, and partnership companies, Version 2 offers quality products and services which are highly acclaimed in the market. Its customers cover a wide spectrum which include Global 1000 enterprises, regional listed companies, different vertical industries, public utilities, Government, a vast number of successful SMEs, and consumers in various Asian cities.<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>ZooKeeper will be completely gone in the next major Apa [&hellip;]<\/p>","protected":false},"author":149011790,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1298,1305,61],"tags":[1077,1302],"class_list":["post-105508","post","type-post","status-publish","format-standard","hentry","category-openlogic","category-1305","category-press-release","tag-1077","tag-openlogic"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Running Kafka Without ZooKeeper in KRaft Mode - Version 2<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.openlogic.com\/blog\/kafka-raft-mode\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Running Kafka Without ZooKeeper in KRaft Mode - Version 2\" \/>\n<meta property=\"og:description\" content=\"ZooKeeper will be completely gone in the next major Apa [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.openlogic.com\/blog\/kafka-raft-mode\" \/>\n<meta property=\"og:site_name\" content=\"Version 2\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-12T04:16:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-24T04:40:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.openlogic.com\/sites\/default\/files\/image\/2022-11\/image-blog-openlogic-kafka-raft-mode-1.png\" \/>\n<meta name=\"author\" content=\"tracylamv2\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"tracylamv2\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.openlogic.com\\\/blog\\\/kafka-raft-mode#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/version-2.com\\\/2025\\\/03\\\/running-kafka-without-zookeeper-in-kraft-mode\\\/\"},\"author\":{\"name\":\"tracylamv2\",\"@id\":\"https:\\\/\\\/version-2.com\\\/zh\\\/#\\\/schema\\\/person\\\/011bc7c3731c930bcfeecd52fefb6365\"},\"headline\":\"Running Kafka Without ZooKeeper in KRaft Mode\",\"datePublished\":\"2025-03-12T04:16:10+00:00\",\"dateModified\":\"2025-03-24T04:40:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/version-2.com\\\/2025\\\/03\\\/running-kafka-without-zookeeper-in-kraft-mode\\\/\"},\"wordCount\":2035,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/version-2.com\\\/zh\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.openlogic.com\\\/blog\\\/kafka-raft-mode#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.openlogic.com\\\/sites\\\/default\\\/files\\\/image\\\/2022-11\\\/image-blog-openlogic-kafka-raft-mode-1.png\",\"keywords\":[\"2025\",\"OpenLogic\"],\"articleSection\":[\"Openlogic\",\"2025\",\"Press Release\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.openlogic.com\\\/blog\\\/kafka-raft-mode#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/version-2.com\\\/2025\\\/03\\\/running-kafka-without-zookeeper-in-kraft-mode\\\/\",\"url\":\"https:\\\/\\\/www.openlogic.com\\\/blog\\\/kafka-raft-mode\",\"name\":\"Running Kafka Without ZooKeeper in KRaft Mode - Version 2\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/version-2.com\\\/zh\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.openlogic.com\\\/blog\\\/kafka-raft-mode#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.openlogic.com\\\/blog\\\/kafka-raft-mode#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.openlogic.com\\\/sites\\\/default\\\/files\\\/image\\\/2022-11\\\/image-blog-openlogic-kafka-raft-mode-1.png\",\"datePublished\":\"2025-03-12T04:16:10+00:00\",\"dateModified\":\"2025-03-24T04:40:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.openlogic.com\\\/blog\\\/kafka-raft-mode#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.openlogic.com\\\/blog\\\/kafka-raft-mode\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.openlogic.com\\\/blog\\\/kafka-raft-mode#primaryimage\",\"url\":\"https:\\\/\\\/www.openlogic.com\\\/sites\\\/default\\\/files\\\/image\\\/2022-11\\\/image-blog-openlogic-kafka-raft-mode-1.png\",\"contentUrl\":\"https:\\\/\\\/www.openlogic.com\\\/sites\\\/default\\\/files\\\/image\\\/2022-11\\\/image-blog-openlogic-kafka-raft-mode-1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.openlogic.com\\\/blog\\\/kafka-raft-mode#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9801\",\"item\":\"https:\\\/\\\/version-2.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Running Kafka Without ZooKeeper in KRaft Mode\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/version-2.com\\\/zh\\\/#website\",\"url\":\"https:\\\/\\\/version-2.com\\\/zh\\\/\",\"name\":\"Version 2\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/version-2.com\\\/zh\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/version-2.com\\\/zh\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/version-2.com\\\/zh\\\/#organization\",\"name\":\"Version 2\",\"url\":\"https:\\\/\\\/version-2.com\\\/zh\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/version-2.com\\\/zh\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/version-2.com\\\/wp-content\\\/uploads\\\/2020\\\/08\\\/v2-hk-hor-4.png?fit=1795%2C335&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/version-2.com\\\/wp-content\\\/uploads\\\/2020\\\/08\\\/v2-hk-hor-4.png?fit=1795%2C335&ssl=1\",\"width\":1795,\"height\":335,\"caption\":\"Version 2\"},\"image\":{\"@id\":\"https:\\\/\\\/version-2.com\\\/zh\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/version-2.com\\\/zh\\\/#\\\/schema\\\/person\\\/011bc7c3731c930bcfeecd52fefb6365\",\"name\":\"tracylamv2\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9d01d79cbfd8b2e878f5d701a362cc9fca466d33fec977b59706c23c1a2db15c?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9d01d79cbfd8b2e878f5d701a362cc9fca466d33fec977b59706c23c1a2db15c?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9d01d79cbfd8b2e878f5d701a362cc9fca466d33fec977b59706c23c1a2db15c?s=96&d=identicon&r=g\",\"caption\":\"tracylamv2\"},\"url\":\"https:\\\/\\\/version-2.com\\\/en\\\/author\\\/tracylamv2\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Running Kafka Without ZooKeeper in KRaft Mode - Version 2","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.openlogic.com\/blog\/kafka-raft-mode","og_locale":"en_US","og_type":"article","og_title":"Running Kafka Without ZooKeeper in KRaft Mode - Version 2","og_description":"ZooKeeper will be completely gone in the next major Apa [&hellip;]","og_url":"https:\/\/www.openlogic.com\/blog\/kafka-raft-mode","og_site_name":"Version 2","article_published_time":"2025-03-12T04:16:10+00:00","article_modified_time":"2025-03-24T04:40:28+00:00","og_image":[{"url":"https:\/\/www.openlogic.com\/sites\/default\/files\/image\/2022-11\/image-blog-openlogic-kafka-raft-mode-1.png","type":"","width":"","height":""}],"author":"tracylamv2","twitter_card":"summary_large_image","twitter_misc":{"Written by":"tracylamv2","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.openlogic.com\/blog\/kafka-raft-mode#article","isPartOf":{"@id":"https:\/\/version-2.com\/2025\/03\/running-kafka-without-zookeeper-in-kraft-mode\/"},"author":{"name":"tracylamv2","@id":"https:\/\/version-2.com\/zh\/#\/schema\/person\/011bc7c3731c930bcfeecd52fefb6365"},"headline":"Running Kafka Without ZooKeeper in KRaft Mode","datePublished":"2025-03-12T04:16:10+00:00","dateModified":"2025-03-24T04:40:28+00:00","mainEntityOfPage":{"@id":"https:\/\/version-2.com\/2025\/03\/running-kafka-without-zookeeper-in-kraft-mode\/"},"wordCount":2035,"commentCount":0,"publisher":{"@id":"https:\/\/version-2.com\/zh\/#organization"},"image":{"@id":"https:\/\/www.openlogic.com\/blog\/kafka-raft-mode#primaryimage"},"thumbnailUrl":"https:\/\/www.openlogic.com\/sites\/default\/files\/image\/2022-11\/image-blog-openlogic-kafka-raft-mode-1.png","keywords":["2025","OpenLogic"],"articleSection":["Openlogic","2025","Press Release"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.openlogic.com\/blog\/kafka-raft-mode#respond"]}]},{"@type":"WebPage","@id":"https:\/\/version-2.com\/2025\/03\/running-kafka-without-zookeeper-in-kraft-mode\/","url":"https:\/\/www.openlogic.com\/blog\/kafka-raft-mode","name":"Running Kafka Without ZooKeeper in KRaft Mode - Version 2","isPartOf":{"@id":"https:\/\/version-2.com\/zh\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.openlogic.com\/blog\/kafka-raft-mode#primaryimage"},"image":{"@id":"https:\/\/www.openlogic.com\/blog\/kafka-raft-mode#primaryimage"},"thumbnailUrl":"https:\/\/www.openlogic.com\/sites\/default\/files\/image\/2022-11\/image-blog-openlogic-kafka-raft-mode-1.png","datePublished":"2025-03-12T04:16:10+00:00","dateModified":"2025-03-24T04:40:28+00:00","breadcrumb":{"@id":"https:\/\/www.openlogic.com\/blog\/kafka-raft-mode#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.openlogic.com\/blog\/kafka-raft-mode"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.openlogic.com\/blog\/kafka-raft-mode#primaryimage","url":"https:\/\/www.openlogic.com\/sites\/default\/files\/image\/2022-11\/image-blog-openlogic-kafka-raft-mode-1.png","contentUrl":"https:\/\/www.openlogic.com\/sites\/default\/files\/image\/2022-11\/image-blog-openlogic-kafka-raft-mode-1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.openlogic.com\/blog\/kafka-raft-mode#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9801","item":"https:\/\/version-2.com\/"},{"@type":"ListItem","position":2,"name":"Running Kafka Without ZooKeeper in KRaft Mode"}]},{"@type":"WebSite","@id":"https:\/\/version-2.com\/zh\/#website","url":"https:\/\/version-2.com\/zh\/","name":"Version 2","description":"","publisher":{"@id":"https:\/\/version-2.com\/zh\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/version-2.com\/zh\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/version-2.com\/zh\/#organization","name":"Version 2","url":"https:\/\/version-2.com\/zh\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/version-2.com\/zh\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/version-2.com\/wp-content\/uploads\/2020\/08\/v2-hk-hor-4.png?fit=1795%2C335&ssl=1","contentUrl":"https:\/\/i0.wp.com\/version-2.com\/wp-content\/uploads\/2020\/08\/v2-hk-hor-4.png?fit=1795%2C335&ssl=1","width":1795,"height":335,"caption":"Version 2"},"image":{"@id":"https:\/\/version-2.com\/zh\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/version-2.com\/zh\/#\/schema\/person\/011bc7c3731c930bcfeecd52fefb6365","name":"tracylamv2","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9d01d79cbfd8b2e878f5d701a362cc9fca466d33fec977b59706c23c1a2db15c?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9d01d79cbfd8b2e878f5d701a362cc9fca466d33fec977b59706c23c1a2db15c?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9d01d79cbfd8b2e878f5d701a362cc9fca466d33fec977b59706c23c1a2db15c?s=96&d=identicon&r=g","caption":"tracylamv2"},"url":"https:\/\/version-2.com\/en\/author\/tracylamv2\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pbQRKm-rrK","post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/version-2.com\/en\/wp-json\/wp\/v2\/posts\/105508","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/version-2.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/version-2.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/version-2.com\/en\/wp-json\/wp\/v2\/users\/149011790"}],"replies":[{"embeddable":true,"href":"https:\/\/version-2.com\/en\/wp-json\/wp\/v2\/comments?post=105508"}],"version-history":[{"count":11,"href":"https:\/\/version-2.com\/en\/wp-json\/wp\/v2\/posts\/105508\/revisions"}],"predecessor-version":[{"id":108712,"href":"https:\/\/version-2.com\/en\/wp-json\/wp\/v2\/posts\/105508\/revisions\/108712"}],"wp:attachment":[{"href":"https:\/\/version-2.com\/en\/wp-json\/wp\/v2\/media?parent=105508"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/version-2.com\/en\/wp-json\/wp\/v2\/categories?post=105508"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/version-2.com\/en\/wp-json\/wp\/v2\/tags?post=105508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}