AutoMQ offers cloud-native scalability and seamless Kafka compatibility with second-level partition reassignment, ensuring efficient, automatic data self-balancing and optimal traffic distribution.
In an online Apache Kafka® cluster, fluctuations in traffic, Topic creation and deletion, and Broker failures and restarts are constantly occurring. These changes can lead to an uneven distribution of traffic across cluster nodes, resulting in resource wastage and impacting business stability. It is essential to proactively reassign different partitions of a Topic across nodes to balance traffic and data.
Apache Kafka has always faced significant challenges in achieving self-balancing of data. The community has two solutions:
The official Apache Kafka partition reassignment tool requires operations personnel to devise specific reassignment plans. For Kafka clusters with hundreds or thousands of nodes, it is nearly impossible to manually monitor the cluster state and create a comprehensive partition reassignment plan.
The community also offers third-party external plugins such as Cruise Control[1] to assist in generating reassignment plans. However, due to the extensive variables involved in Apache Kafka’s self-balancing process (replica distribution, leader traffic distribution, node resource utilization, etc.) and the resource contention and hours-to-days-long duration caused by data synchronization, existing solutions are complex and have low decision timeliness. Implementing data self-balancing strategies still relies on operations personnel’s review and continuous monitoring, failing to truly address the challenges posed by Apache Kafka data self-balancing.
Thanks to AutoMQ’s deep integration with cloud-native capabilities, we have reimplemented Apache Kafka’s underlying storage entirely based on cloud object storage, upgrading from a Shared Nothing architecture to a Shared Storage architecture. This enables second-level partition reassignment capabilities, greatly simplifying the factors involved in reassignment planning:
There is no need to consider node disk resources.
No need to consider the leader distribution and replica distribution of partitions.
The reassignment of partitions does not involve data synchronization and copying.
Therefore, we have the opportunity to implement a built-in, lightweight automatic data balancing component within AutoMQ, which continuously monitors cluster status and automatically performs partition reassignment.
The figure above is the architecture diagram of AutoMQ’s built-in Auto Balancing component. This architecture collects cluster metrics, automatically generates partition reassignment plans, and continuously balances the cluster’s traffic.AutoMQ implements Apache Kafka’s MetricsReporter interface, monitoring all built-in metrics information of Apache Kafka. It periodically samples metrics of interest (such as network ingress and egress traffic, CPU utilization, etc.) and pre-aggregates these metrics on the Broker side. The aggregated metrics are serialized into a Kafka message and sent to a designated internal Topic.The AutoMQ Controller maintains an in-memory cluster state model to describe the current state of the cluster, including Broker status, Broker resource capacity, and the traffic information of Topic-Partition managed by each Broker. By listening to KRaft Log event information, the cluster state model can promptly sense changes in the status of Broker and Topic-Partition and update the model accordingly to remain consistent with the actual cluster state.Meanwhile, the metrics collector in the AutoMQ Controller consumes messages from the internal Topic in real-time, deserializes the messages into specific metrics, and updates them into the cluster state model, thereby constructing all the prerequisite information needed for data self-balancing.AutoMQ Controller’s scheduler periodically captures snapshots of the cluster state model and identifies overutilized or underutilized brokers based on predefined “goals.” It then attempts to reassign or exchange partitions to achieve traffic self-balancing.
Consider a three-node AutoMQ cluster. Initially, each of the three nodes handles approximately 40MiB/s of write traffic. In the second phase, the traffic for Broker-0 is increased to about 80MiB/s, Broker-1 to about 120MiB/s, and Broker-2 remains at 40MiB/s. As shown in the figure above, automatic load balancing is triggered in the second phase, and the traffic across the three brokers gradually converges to a balanced range.
NOTE: In this scenario, to facilitate observation, the partition reassignment cooldown time is manually extended. With the default configuration, the traffic balancing time is approximately 1 minute.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"AutoMQ Documentation","colors":{"primary":"#2449D4","light":"#2449D4","dark":"#2449D4"},"logo":{"light":"https://mintcdn.com/automq/s9vNxeyMGZ1r1DRV/logo/automq-black.svg?fit=max\u0026auto=format\u0026n=s9vNxeyMGZ1r1DRV\u0026q=85\u0026s=bcc93ae74a4143ae2b7602497b7b354b","dark":"https://mintcdn.com/automq/s9vNxeyMGZ1r1DRV/logo/automq-white.svg?fit=max\u0026auto=format\u0026n=s9vNxeyMGZ1r1DRV\u0026q=85\u0026s=209c336f52b4021f2e991e10d07613ae"},"favicon":"https://mintcdn.com/automq/s9vNxeyMGZ1r1DRV/logo/favicon.svg?fit=max\u0026auto=format\u0026n=s9vNxeyMGZ1r1DRV\u0026q=85\u0026s=d736b0934a674250c9dbe95a5f642fb9","appearance":{"default":"light","strict":true},"navbar":{"links":[{"icon":"github","href":"https://github.com/automq/automq","label":"Github"}],"primary":{"type":"button","label":"automq.com","href":"https://www.automq.com"}},"footer":{"socials":{"slack":"https://go.automq.com/slack","telegram":"https://t.me/+VgqhN9wqBGIzYmU1","x":"https://x.com/AutoMQ_Lab","github":"https://github.com/automq/automq","linkedin":"https://linkedin.com/company/automq"}},"icons":{"library":"lucide"},"integrations":{"ga4":{"measurementId":"G-4F3BX9DFG9"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Github","icon":"github","href":"https://github.com/automq/automq"},{"anchor":"Slack","icon":"slack","href":"https://go.automq.com/slack"},{"anchor":"Telegram","icon":"Telegram","href":"https://t.me/+VgqhN9wqBGIzYmU1"},{"anchor":"Blog","icon":"newspaper","href":"https://www.automq.com/blog"}]},"languages":[{"language":"en","href":""},{"language":"cn","href":"zh/automq/what-is-automq/overview"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"automq","hasAudioNarration":false,"actualSubdomain":"automq","customDomains":["docs.automq.com"],"gitSource":{"type":"github","owner":"automq","repo":"sitebox","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad735a93eabd17c66250d4b","collectionId":"54500605-320d-46b3-b896-c0d1e0d9a573","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad735a93eabd17c66250d4b"},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ad735a93eabd17c66250d4b","clientVersion":"0.0.3902","searchFilterCounts":[{"language":"cn","tag":"AutoMQ BYOC","count":124},{"language":"en","tag":"AutoMQ BYOC","count":113},{"language":"en","tag":"AutoMQ Open Source","count":61},{"language":"cn","tag":"AutoMQ Open Source","count":57},{"language":"en","tag":"Kafka Connect","count":48},{"language":"cn","tag":"Kafka Connect","count":48},{"language":"en","tag":"Sink Connectors","count":26},{"language":"cn","tag":"Sink Connectors","count":26},{"language":"en","tag":"Source Connectors","count":19},{"language":"cn","tag":"Source Connectors","count":19},{"language":"cn","tag":"快速开始","count":16},{"language":"en","tag":"Integrations","count":14},{"language":"en","tag":"Getting Started","count":12},{"language":"cn","tag":"生态集成","count":12},{"language":"en","tag":"Architecture","count":11},{"language":"cn","tag":"管理环境","count":11},{"language":"cn","tag":"技术架构","count":11},{"language":"cn","tag":"安装 BYOC 环境","count":9},{"language":"en","tag":"Eliminate Inter-Zone Traffics","count":8},{"language":"en","tag":"Manage Environments","count":8}]},"assistantConfig":{"deflection":{"enabled":true,"email":"support@automq.com"}},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2-autocommit","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"teamspace","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"client-snapshot-docs-config","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"static/style.css","content":"#content-area{word-break:keep-all;white-space:normal;overflow-wrap:normal}header div:nth-child(2) p{display:none}.emphasize-placeholder{background-color:#e0f2ff;border:1px solid #2d64eb;padding:2px 6px;border-radius:4px;font-family:monospace;cursor:pointer;display:inline-flex;align-items:center}.emoji-flip{display:inline-block;transform:scaleX(-1);font-size:.8em;margin-left:4px}"}],"page":{"pagePath":"automq/architecture/technical-advantage/continuous-self-balancing","slug":"/automq/architecture/technical-advantage/continuous-self-balancing","pageMetadata":{"title":"Continuous Self-Balancing","description":"AutoMQ offers cloud-native scalability and seamless Kafka compatibility with second-level partition reassignment, ensuring efficient, automatic data self-balancing and optimal traffic distribution.","href":"/automq/architecture/technical-advantage/continuous-self-balancing"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"AutoMQ offers cloud-native scalability and seamless Kafka compatibility with second-level partition reassignment, ensuring efficient, automatic data self-balancing and optimal traffic distribution.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,li:`li`,p:`p`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Note,OptimizedImage}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`In an online Apache Kafka® cluster, fluctuations in traffic, Topic creation and deletion, and Broker failures and restarts are constantly occurring. These changes can lead to an uneven distribution of traffic across cluster nodes, resulting in resource wastage and impacting business stability. It is essential to proactively reassign different partitions of a Topic across nodes to balance traffic and data.`}),`\n`,_jsx(Heading,{level:`2`,id:`challenges-faced-by-open-source-solutions`,children:`Challenges Faced by Open Source Solutions`}),`\n`,_jsx(_components.p,{children:`Apache Kafka has always faced significant challenges in achieving self-balancing of data. The community has two solutions:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`The official Apache Kafka partition reassignment tool requires operations personnel to devise specific reassignment plans. For Kafka clusters with hundreds or thousands of nodes, it is nearly impossible to manually monitor the cluster state and create a comprehensive partition reassignment plan.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`The community also offers third-party external plugins such as Cruise Control[1] to assist in generating reassignment plans. However, due to the extensive variables involved in Apache Kafka’s self-balancing process (replica distribution, leader traffic distribution, node resource utilization, etc.) and the resource contention and hours-to-days-long duration caused by data synchronization, existing solutions are complex and have low decision timeliness. Implementing data self-balancing strategies still relies on operations personnel’s review and continuous monitoring, failing to truly address the challenges posed by Apache Kafka data self-balancing.`}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`automq’s-architectural-advantages`,children:`AutoMQ’s Architectural Advantages`}),`\n`,_jsx(_components.p,{children:`Thanks to AutoMQ’s deep integration with cloud-native capabilities, we have reimplemented Apache Kafka’s underlying storage entirely based on cloud object storage, upgrading from a Shared Nothing architecture to a Shared Storage architecture. This enables second-level partition reassignment capabilities, greatly simplifying the factors involved in reassignment planning:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`There is no need to consider node disk resources.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`No need to consider the leader distribution and replica distribution of partitions.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`The reassignment of partitions does not involve data synchronization and copying.`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Therefore, we have the opportunity to implement a built-in, lightweight automatic data balancing component within AutoMQ, which continuously monitors cluster status and automatically performs partition reassignment.`}),`\n`,_jsx(Heading,{level:`2`,id:`automq-data-self-balancing-implementation`,children:`AutoMQ Data Self-Balancing Implementation`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/1.webp?fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=de2d4454c8a7891ebe7e54d7706b3017`,\"data-og-width\":`2560`,width:`2560`,\"data-og-height\":`1842`,height:`1842`,\"data-path\":`automq/architecture/technical-advantage/continuous-self-balancing/1.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/1.webp?w=280\u0026fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=dd5055dc926acc6b64db0c40f1ba58d1 280w, https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/1.webp?w=560\u0026fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=1baebc88407a5b78d0e3156977d50b32 560w, https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/1.webp?w=840\u0026fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=4123d2ae3ca426dfe7a78a897cd90010 840w, https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/1.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=e6c5ec73757dc5297313df3ba1ad43d1 1100w, https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/1.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=dc3d77f94fda2cab48608ea9415cdf2c 1650w, https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/1.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=5986bc26174e4b77ac1da232ff043192 2500w`}),`\n`,_jsx(_components.p,{children:`The figure above is the architecture diagram of AutoMQ’s built-in Auto Balancing component. This architecture collects cluster metrics, automatically generates partition reassignment plans, and continuously balances the cluster’s traffic.`}),`\n`,_jsx(_components.p,{children:`AutoMQ implements Apache Kafka’s MetricsReporter interface, monitoring all built-in metrics information of Apache Kafka. It periodically samples metrics of interest (such as network ingress and egress traffic, CPU utilization, etc.) and pre-aggregates these metrics on the Broker side. The aggregated metrics are serialized into a Kafka message and sent to a designated internal Topic.`}),`\n`,_jsx(_components.p,{children:`The AutoMQ Controller maintains an in-memory cluster state model to describe the current state of the cluster, including Broker status, Broker resource capacity, and the traffic information of Topic-Partition managed by each Broker. By listening to KRaft Log event information, the cluster state model can promptly sense changes in the status of Broker and Topic-Partition and update the model accordingly to remain consistent with the actual cluster state.`}),`\n`,_jsx(_components.p,{children:`Meanwhile, the metrics collector in the AutoMQ Controller consumes messages from the internal Topic in real-time, deserializes the messages into specific metrics, and updates them into the cluster state model, thereby constructing all the prerequisite information needed for data self-balancing.`}),`\n`,_jsx(_components.p,{children:`AutoMQ Controller’s scheduler periodically captures snapshots of the cluster state model and identifies overutilized or underutilized brokers based on predefined “goals.” It then attempts to reassign or exchange partitions to achieve traffic self-balancing.`}),`\n`,_jsx(Heading,{level:`2`,id:`automq-data-self-balancing-example`,children:`AutoMQ Data Self-Balancing Example`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/2.webp?fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=5d8432cb4441f39fc8db657b00e0b52d`,\"data-og-width\":`2560`,width:`2560`,\"data-og-height\":`1074`,height:`1074`,\"data-path\":`automq/architecture/technical-advantage/continuous-self-balancing/2.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/2.webp?w=280\u0026fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=928e61195030ff88613b1c7447cdcbaa 280w, https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/2.webp?w=560\u0026fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=be8fb13e8ff9b883575c13d890cd8de5 560w, https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/2.webp?w=840\u0026fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=a14201454b74c695352a0676ad1870a5 840w, https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/2.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=0acd2635cffebff4c5c745b65e77d18d 1100w, https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/2.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=2ac5c13c6161ea0b45171d5bfa6714c0 1650w, https://mintcdn.com/automq/1QgM5miUDiCjXCsL/automq/architecture/technical-advantage/continuous-self-balancing/2.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=1QgM5miUDiCjXCsL\u0026q=85\u0026s=f7f5e94cccec0feacce3f1117f793779 2500w`}),`\n`,_jsx(_components.p,{children:`Consider a three-node AutoMQ cluster. Initially, each of the three nodes handles approximately 40MiB/s of write traffic. In the second phase, the traffic for Broker-0 is increased to about 80MiB/s, Broker-1 to about 120MiB/s, and Broker-2 remains at 40MiB/s. As shown in the figure above, automatic load balancing is triggered in the second phase, and the traffic across the three brokers gradually converges to a balanced range.`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`NOTE: In this scenario, to facilitate observation, the partition reassignment cooldown time is manually extended. With the default configuration, the traffic balancing time is approximately 1 minute.`})}),`\n`,_jsx(Heading,{level:`2`,id:`quick-experience`,children:`Quick Experience`}),`\n`,_jsxs(_components.p,{children:[`Refer to `,_jsx(_components.a,{href:`/automq/getting-started/explore-automq/example-continuous-data-self-balancing`,children:`Example: Continuous Data Self-Balancing▸`}),` to experience the continuous data self-balancing capabilities of AutoMQ.`]}),`\n`,_jsx(Heading,{level:`2`,id:`references`,children:`References`}),`\n`,_jsxs(_components.p,{children:[`[1]. LinkedIn’s open-source Cruise Control tool: `,_jsx(_components.a,{href:`https://github.com/linkedin/cruise-control`,children:`https://github.com/linkedin/cruise-control`})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Continuous Self-Balancing","description":"AutoMQ offers cloud-native scalability and seamless Kafka compatibility with second-level partition reassignment, ensuring efficient, automatic data self-balancing and optimal traffic distribution.","href":"/automq/architecture/technical-advantage/continuous-self-balancing"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Challenges Faced by Open Source Solutions","slug":"challenges-faced-by-open-source-solutions","depth":2,"children":[]},{"title":"AutoMQ’s Architectural Advantages","slug":"automq’s-architectural-advantages","depth":2,"children":[]},{"title":"AutoMQ Data Self-Balancing Implementation","slug":"automq-data-self-balancing-implementation","depth":2,"children":[]},{"title":"AutoMQ Data Self-Balancing Example","slug":"automq-data-self-balancing-example","depth":2,"children":[]},{"title":"Quick Experience","slug":"quick-experience","depth":2,"children":[]},{"title":"References","slug":"references","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/automq/48fec8bab1afa455/content/monitor.js","/_mintlify/custom/automq/c09aa9839083e17a/content/hubspot.js","/_mintlify/custom/automq/786ace9ed17adbd7/content/luckyorange-tracking.js"],"subdomain":"automq","siteName":"AutoMQ Documentation","title":"Continuous Self-Balancing - AutoMQ Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/automq/architecture/technical-advantage/continuous-self-balancing","matchLevel":0},"cn":{"href":"/zh/automq/architecture/technical-advantage/continuous-self-balancing","matchLevel":1}}},"lastModified":"2026-03-12T06:13:47.265Z","originalFileLocation":"automq/architecture/technical-advantage/continuous-self-balancing.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"AutoMQ offers cloud-native scalability and seamless Kafka compatibility with second-level partition reassignment, ensuring efficient, automatic data self-balancing and optimal traffic distribution.\">\u003cmeta data-mint-head name=\"application-name\" content=\"AutoMQ Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/automq/ZRmM16tNeY4WJ6hO/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/automq/ZRmM16tNeY4WJ6hO/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/automq/ZRmM16tNeY4WJ6hO/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/automq/ZRmM16tNeY4WJ6hO/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/automq/ZRmM16tNeY4WJ6hO/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/automq/ZRmM16tNeY4WJ6hO/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/automq/ZRmM16tNeY4WJ6hO/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/automq/ZRmM16tNeY4WJ6hO/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/automq/ZRmM16tNeY4WJ6hO/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Continuous Self-Balancing - AutoMQ Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"AutoMQ offers cloud-native scalability and seamless Kafka compatibility with second-level partition reassignment, ensuring efficient, automatic data self-balancing and optimal traffic distribution.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"AutoMQ Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.automq.com/automq/architecture/technical-advantage/continuous-self-balancing\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Continuous Self-Balancing - AutoMQ Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"AutoMQ offers cloud-native scalability and seamless Kafka compatibility with second-level partition reassignment, ensuring efficient, automatic data self-balancing and optimal traffic distribution.\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/automq/ZRmM16tNeY4WJ6hO/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"AutoMQ Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2449D4\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.automq.com/automq/architecture/technical-advantage/continuous-self-balancing\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/automq/architecture/technical-advantage/continuous-self-balancing.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.automq.com/automq/architecture/technical-advantage/continuous-self-balancing\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://docs.automq.com/zh/automq/architecture/technical-advantage/continuous-self-balancing\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.automq.com/automq/architecture/technical-advantage/continuous-self-balancing\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.automq.com/#organization\",\"name\":\"AutoMQ Documentation\",\"url\":\"https://docs.automq.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/automq/s9vNxeyMGZ1r1DRV/logo/automq-black.svg?fit=max\u0026auto=format\u0026n=s9vNxeyMGZ1r1DRV\u0026q=85\u0026s=bcc93ae74a4143ae2b7602497b7b354b\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.automq.com#website\",\"name\":\"AutoMQ Documentation\",\"url\":\"https://docs.automq.com\",\"publisher\":{\"@id\":\"https://docs.automq.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.automq.com/automq/architecture/technical-advantage/continuous-self-balancing#webpage\",\"url\":\"https://docs.automq.com/automq/architecture/technical-advantage/continuous-self-balancing\",\"name\":\"Continuous Self-Balancing\",\"description\":\"AutoMQ offers cloud-native scalability and seamless Kafka compatibility with second-level partition reassignment, ensuring efficient, automatic data self-balancing and optimal traffic distribution.\",\"dateModified\":\"2026-03-12T06:13:47.265Z\",\"isPartOf\":{\"@id\":\"https://docs.automq.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.automq.com/automq/architecture/technical-advantage/continuous-self-balancing#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.automq.com/automq/architecture/technical-advantage/continuous-self-balancing#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Architecture\",\"item\":\"https://docs.automq.com/automq/architecture/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Technical Advantage\",\"item\":\"https://docs.automq.com/automq/architecture/technical-advantage/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Continuous Self-Balancing\",\"item\":\"https://docs.automq.com/automq/architecture/technical-advantage/continuous-self-balancing\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.automq.com/automq/architecture/technical-advantage/continuous-self-balancing#article\",\"headline\":\"Continuous Self-Balancing\",\"name\":\"Continuous Self-Balancing\",\"description\":\"AutoMQ offers cloud-native scalability and seamless Kafka compatibility with second-level partition reassignment, ensuring efficient, automatic data self-balancing and optimal traffic distribution.\",\"url\":\"https://docs.automq.com/automq/architecture/technical-advantage/continuous-self-balancing\",\"mainEntityOfPage\":{\"@id\":\"https://docs.automq.com/automq/architecture/technical-advantage/continuous-self-balancing#webpage\"},\"dateModified\":\"2026-03-12T06:13:47.265Z\",\"publisher\":{\"@id\":\"https://docs.automq.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.automq.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"AutoMQ Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"AutoMQ Documentation","nav":{"global":{"anchors":[{"anchor":"Github","icon":"github","href":"https://github.com/automq/automq"},{"anchor":"Slack","icon":"slack","href":"https://go.automq.com/slack"},{"anchor":"Telegram","icon":"Telegram","href":"https://t.me/+VgqhN9wqBGIzYmU1"},{"anchor":"Blog","icon":"newspaper","href":"https://www.automq.com/blog"}]},"languages":[{"language":"en","tabs":[{"tab":"Home","icon":"house","pages":[{"title":"Home","href":""}]},{"tab":"AutoMQ Open Source","icon":"github","groups":[{"group":"What is AutoMQ?","icon":"book","pages":[{"title":"Overview","href":"/automq/what-is-automq/overview"},{"title":"Difference with Apache Kafka","href":"/automq/what-is-automq/difference-with-apache-kafka"},{"title":"Difference with Tiered Storage","href":"/automq/what-is-automq/difference-with-tiered-storage"},{"title":"Compatibility with Apache Kafka","href":"/automq/what-is-automq/compatibility-with-apache-kafka"},{"title":"Licensing and Enterprise Features","href":"/automq/what-is-automq/licensing-and-enterprise-features"}]},{"group":"Getting Started","icon":"play","pages":[{"title":"Deploy Multi-Nodes Test Cluster on Docker","href":"/automq/getting-started/deploy-multi-nodes-test-cluster-on-docker"},{"group":"Explore AutoMQ","pages":[{"title":"Example: Partition Reassignment in Seconds","href":"/automq/getting-started/explore-automq/example-partition-reassignment-in-seconds"},{"title":"Example: Continuous Data Self-Balancing","href":"/automq/getting-started/explore-automq/example-continuous-data-self-balancing"},{"title":"Example: Self-Balancing when Cluster Nodes Change","href":"/automq/getting-started/explore-automq/example-self-balancing-when-cluster-nodes-change"}]}]},{"group":"Deployment","icon":"wrench","pages":[{"title":"Overview","href":"/automq/deployment/overview"},{"title":"Deploy Multi-Nodes Cluster on Linux","href":"/automq/deployment/deploy-multi-nodes-cluster-on-linux"},{"title":"Deploy Multi-Nodes Cluster on Kubernetes","href":"/automq/deployment/deploy-multi-nodes-cluster-on-kubernetes"},{"title":"Deploy Multi-Nodes Cluster on Kubernetes with Strimzi","href":"/automq/deployment/multi-nodes-cluster-with-strimzi"},{"title":"Introduction and Deployment Recommendations for AutoMQ Open Source Image","href":"/automq/deployment/deployment-recommendations"},{"title":"Performance Tuning for Broker","href":"/automq/deployment/performance-tuning-for-broker"},{"title":"Performance Tuning for Client","href":"/automq/configuration/performance-tuning-for-client"},{"title":"AutoMQ Benchmark","href":"/automq/deployment/automq-benchmark"}]},{"group":"Migration","icon":"arrow-left-right","pages":[{"title":"Overview","href":"/automq/migration/overview"},{"title":"Migrating from Apache Kafka to AutoMQ","href":"/automq/migration/migrating-from-apache-kafka-to-automq"}]},{"group":"Observability","icon":"telescope","pages":[{"title":"Overview","href":"/automq/observability/overview"},{"title":"Integrating Metrics with Prometheus","href":"/automq/observability/integrating-metrics-with-prometheus"},{"title":"Dashboard Configuration","href":"/automq/observability/dashboard-configuration"},{"title":"Prometheus Metrics","href":"/automq/observability/prometheus-metrics"}]},{"group":"Architecture","icon":"landmark","pages":[{"title":"Overview","href":"/automq/architecture/overview"},{"group":"S3Stream Shared Streaming Storage","pages":[{"title":"Overview","href":"/automq/architecture/s3stream-shared-streaming-storage/overview"},{"title":"S3 Storage","href":"/automq/architecture/s3stream-shared-streaming-storage/s3-storage"},{"title":"WAL Storage","href":"/automq/architecture/s3stream-shared-streaming-storage/wal-storage"}]},{"group":"Technical Advantage","icon":"atom","pages":[{"title":"Overview","href":"/automq/architecture/technical-advantage/overview"},{"title":"5x Catch-up Read Efficiency","description":"AutoMQ offers 5x catch-up read efficiency over Apache Kafka with cold and hot data isolation, cloud-native scalability, Kafka compatibility, and better cost efficiency.","href":"/automq/architecture/technical-advantage/5x-catch-up-read-efficiency"},{"title":"Continuous Self-Balancing","href":"/automq/architecture/technical-advantage/continuous-self-balancing"},{"title":"Native Compatible with Apache Kafka","description":"AutoMQ ensures 100% compatibility with Apache Kafka's protocol and semantics, providing cloud-native scalability, cost-efficient storage solutions, and seamless integration.","href":"/automq/architecture/technical-advantage/native-compatible-with-apache-kafka"},{"title":"Partition Reassignment in Seconds","href":"/automq/architecture/technical-advantage/partition-reassignment-in-seconds"},{"title":"Scale-out/in in Seconds","href":"/automq/architecture/technical-advantage/scale-outin-in-seconds"},{"title":"Stateless Broker","href":"/automq/architecture/technical-advantage/stateless-broker"}]}]},{"group":"Table Topic","icon":"text-search","pages":[{"title":"Overview","href":"/automq/table-topic/overview"},{"title":"Table Topic Quick Start","href":"/automq/table-topic/table-topic-quick-start"},{"title":"Table Topic Configuration","href":"/automq/table-topic/table-topic-configuration"}]},{"group":"Eliminate Inter-Zone Traffics","icon":"audio-lines","pages":[{"title":"Overview","href":"/automq/eliminate-inter-zone-traffics/overview"},{"title":"Broker Configuration","href":"/automq/eliminate-inter-zone-traffics/broker-configuration"},{"title":"Client Configuration","href":"/automq/eliminate-inter-zone-traffics/client-configuration"},{"title":"Monitor Inter Zone Traffic","href":"/automq/eliminate-inter-zone-traffics/monitor-inter-zone-traffic"}]},{"group":"Integrations","icon":"blocks","pages":[{"group":"Data Analysis","pages":[{"title":"Apache Doris","href":"/automq/integrations/data-analysis/apache-doris"},{"title":"Databend","href":"/automq/integrations/data-analysis/databend"},{"title":"Flink","href":"/automq/integrations/data-analysis/flink"},{"title":"RisingWave","href":"/automq/integrations/data-analysis/risingwave"},{"title":"StarRocks","href":"/automq/integrations/data-analysis/starrocks"}]},{"group":"Data Integration","pages":[{"title":"Airbyte","href":"/automq/integrations/data-integration/airbyte"},{"title":"Debezium","href":"/automq/integrations/data-integration/debezium"}]},{"group":"Kafka UI","pages":[{"title":"Kafdrop","href":"/automq/integrations/kafka-ui/kafdrop"},{"title":"Redpanda Console","href":"/automq/integrations/kafka-ui/redpanda-console"}]},{"group":"Observability","pages":[{"title":"Flashcat","href":"/automq/integrations/observability/flashcat"},{"title":"Guance Cloud","href":"/automq/integrations/observability/guance-cloud"},{"title":"Prometheus/VictoriaMetrics","href":"/automq/integrations/observability/prometheus"}]},{"group":"Storage","pages":[{"title":"RustFS","href":"/automq/integrations/storage/rustfs"},{"title":"Tigris","href":"/automq/integrations/storage/tigris"}]}]},{"group":"Configuration","icon":"settings","pages":[{"title":"Broker and Controller Configuration","href":"/automq/configuration/broker-and-controller-configuration"},{"title":"Object Storage Configuration","href":"/automq/configuration/object-storage-configuration"}]},{"group":"Releases","icon":"git-merge","pages":[{"title":"Software Artifact","href":"/automq/releases/software-artifact"},{"url":"https://github.com/AutoMQ/automq/releases/","title":null,"href":"/automq/releases/release-notes"}]},{"group":"Benchmarks","icon":"chart-spline","pages":[{"title":"AutoMQ vs. Apache Kafka Benchmarks and Cost","href":"/automq/benchmarks/automq-vs-apache-kafka-benchmarks-and-cost"}]},{"group":"Reference","icon":"book-marked","pages":[{"title":"Glossary","href":"/automq/reference/glossary"}]}]},{"tab":"AutoMQ BYOC","icon":"cloud","pages":[{"title":"AutoMQ BYOC","href":"/automq-cloud/overview/what-is-automq-cloud"}]}]},{"language":"cn","pages":[{"title":"cn","href":"/zh/automq/architecture/technical-advantage/continuous-self-balancing"}]}]},"title":"Continuous Self-Balancing - AutoMQ Documentation","buildId":"dpl_C3fsfi1EcrBns9Vx91gUSN1X3Hi4","deploymentId":"dpl_C3fsfi1EcrBns9Vx91gUSN1X3Hi4","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-Evwtz42K.js","PlusIcon-DYlJbUaT.js","lightbox-handle-r17bVUz3.js"]}