IT评测·应用市场-qidao123.com技术社区

标题: AutoMQ:无需 Cruise Control 实现 Kafka 的自动分区再均衡 [打印本页]

作者: 千千梦丶琪    时间: 2025-3-1 12:11
标题: AutoMQ:无需 Cruise Control 实现 Kafka 的自动分区再均衡

   导读:AutoMQ是一款贯彻云优先理念来设计的 Kafka 替代产品。AutoMQ 创新地对 Apache Kafka 的存储层举行了基于云的重新设计,在 100% 兼容 Kafka 的底子上通过将长期性分离至 EBS 和 S3 带来了 10x 的成本降低以及 100x 的弹性能力提升,并且相比 Apache Kafka 拥有更佳的性能。
  在本文中,Vu Trinh 探讨了 AutoMQ 如何通过消除代理之间的数据移动来彻底改变 Kafka 分区重新分配流程。文章起首分析了尺度的 Kafka 分区和重新分配过程,以及当火线案(如 Cruise Control)的局限性。接着深入解说了 AutoMQ 如何利用云原生架构,实现与 Kafka 100% 兼容,并将数据存储在对象存储上,从而简化操作并提高服从。末了,本文详细介绍了 AutoMQ 的 AutoBalancer,它能够准确且轻松地自动实现负载均衡。了解 AutoMQ 如何有效解决 Kafka 的重新均衡挑衅。阅读原文:AutoMQ: Achieving Auto Partition Reassignment In Kafka Without Cruise Control
  简介

如果你在公司内部管理过 Kafka 部署,大概会执行跨集群分区重新分配操作。由于 Kafka 中盘算和存储的紧密耦合,当集群成员发生变革(如添加或移除 broker)或用户希望在 broker 之间均衡负载时,分区副本需要重新分配到差别的 broker,从而导致数据迁移。
虽然 Kafka 提供了处理重新分配过程的脚本,但它需要用户干预,并且在规划方面缺乏妥当性。诸如 Cruise Control 之类的工具,基于集群状态提供自动化的副本均衡,并提供更详细的重新分配规划。
然而,数据迁移的问题仍旧存在。
本周,我们将探讨 AutoMQ 如何解决 Kafka 的再均衡挑衅。AutoMQ 是一款云原生解决方案,提供 100% Kafka 兼容性,同时将数据完全存储在对象存储中。这种方法提供了一种高性价比的 Kafka 替代方案,同时不捐躯低耽误和高吞吐量性能。更紧张的是,您不再需要在 Broker 之间传输数据。

Kakfa Partitions

   起首让我们回顾Kafka相干术语。
  在 Kafka 中,数据单元是消息。消息在 Kafka 中被组织成主题。可以将消息视为数据库系统中的行,而主题则相当于表。一个主题被分成多个分区。

图像由作者创建。
主题的每个分区对应一个逻辑日志。在物理层面,日志实现为一组巨细大抵相同的段文件(例如,1GB)。每当消息写入分区时,Broker 会将该消息追加到末了一个段文件。

图像由作者创建。
为了确保数据的长期性和可用性,分区将被复制到可配置数量的Broker (代理)。

图像由作者创建。
当一个 Broker(代理)出现故障时,这一机制可以自动执行副本的故障切换,确保消息只管发生故障仍旧可用。每个 Kafka 分区通常有一个 leader(领导者)和零个或多个 followers(跟随者,存储副本的节点)。所有写操作必须发送到分区的 leader,而读操作可以由 leader 或分区的 followers 处理。
Kafka 以轮询的方式将分区副本分布在整个集群中,以克制将高流量主题的所有分区会合在少数节点上。

Kafka 中的副本重新分配

考虑到副本分布在整个集群中,当现有 broker 瓦解或新 broker 添加时会发生什么?Kafka 副本需要重新分配。假设我们有三个 broker 和两个分区,每个分区有两个副本:

图像由作者创建。


图像由作者创建。


图像由作者创建。
除了集群成员的变更外,均衡 Broker 之间的工作负载还需要重新分配分区副本。匀称地在 Broker 之间分布数据有助于防止热点问题,由于某些分区大概会吸收到比其他分区更多的流量。别的,确保数据在 Broker 之间匀称分布能够优化资源利用率。
开源版本的 Kafka 提供了一个工具来促进分区重新分配,称为 kafka-reassign-partitions (bin/kafka-reassign-partitions.sh)。这个工具可以在三种模式下操作:

然而,用户手动完成再分配过程容易堕落且服从低下。那么,有没有办法实现再分配的自动化?幸运的是,已经有第三方工具专门为此目的开辟。

LinkedIn 的 Cruise Control

Cruise Control 是一个帮助大规模运行 Apache Kafka 集群的工具。由于其受欢迎程度,许多公司拥有越来越多的 Kafka 集群。在 LinkedIn 管理约 7000 多个 Kafka brokers 意味着均衡 Kafka 工作负载是一个巨大的挑衅。别的,在大型 Kafka 集群中监控和检测问题也是至关紧张的。
Cruise Control 提供以下能力:

Cruise Control 依靠最新的副本负载信息来优化集群。它定期收集 Broker 和分区级别的资源利用情况,以捕获每个分区的流量模式。利用这些模式,确定每个分区对 Broker 的负载影响。然后,该工具构建一个工作负载模型来模拟 Kafka 集群的性能。目标优化器根据用户定义的一组目标,探索生成集群工作负载优化计划的各种方法。

图像由作者创建。
这种方法与kafka-reassign-partitions差别,虽然Kafka的原生工具仅根据提供的输入重新分配分区,但Cruise Control利用工作负载建模来提供更全面的重新均衡计划目标。
虽然Cruise Control有助于降低重新均衡操作的成本,但网络上传输数据的需求仍旧存在。当数据在broker之间传输时,集群必须等待一段时间才能达到均衡状态。这导致无论是利用Cruise Control照旧其他第三方工具,重新均衡在执行过程中都大概存在不准确性。这些工具只能基于集群的当前快照做出决策。鉴于Kafka的数据复制要求,决策过程较为迟钝。因此,依靠于这些决策的集群快照大概会发生显著变革,导致正确性降低。
这个问题在Kafka中依然存在,由于它设计上需要保持存储和盘算的紧麋集成。

AutoMQ:无需再举行数据移动。

当我们讨论AutoMQ时,情况变得很简单。
AutoMQ利用Apache Kafka代码实现了对Kafka协议的100%兼容,同时引入共享存储架构以取代Kafka代理的本地磁盘。其目标是使系统完全无状态化。
虽然Kafka代理将消息直接写入操作系统的页面缓存,但AutoMQ代理则起首将消息写入堆外内存缓存,并在批量处理数据后再写入对象存储。为确保在代理从内存向对象存储传输数据过程中遭遇故障时的数据耐久性,AutoMQ引入了可插拔的预写日志(Write-Ahead Log,WAL)到磁盘。代理必须在将消息写入S3之前,先验证消息已存储在WAL中。一旦收到消息,代理便将其写入内存缓存,并只有在消息被长期化到WAL后才举行确认。在代理故障时,AutoMQ利用WAL中的数据举行恢复。

图像由作者创建。
通过这种方式,AutoMQ实现了盘算与存储的完全分离。AutoMQ的设计暗示了两个基本领实:

图像由作者创建。

因此,重新均衡过程变得极其简单。数据不需要移动;AutoMQ只需调解代理与分区之间的元数据映射即可。这使得决策得以迅速、正确、高效地执行。
关于元数据,AutoMQ利用Kafka的KRaft模式(Kafka Raft)举行元数据管理。最初,Kafka依靠于单独的ZooKeeper服务器来管理集群元数据。通过KRaft模式,Kafka利用基于Raft的内部控制器法定人数——一组负责维护和确保元数据同等性的代理。在KRaft模式下,每个代理保留元数据的本地副本。同时,控制器法定人数的领导者管理更新并将其复制到所有代理,从而减少运营的复杂性和潜在的故障点。
AutoMQ 将集群元数据(如分区和代理之间的映射)存储在控制器仲裁的领导者中。只有领导者可以修改这些元数据;如果代抱负要更改它,必须与领导者通信。元数据会被复制到每个代理;控制器会将元数据的任何更改广播给每个代理。

AutoBalancer:AutoMQ 的自均衡功能

目标

目标指一组指导 Kafka 集群优化和均衡的目标或约束。这些目标定义了详细的要求,如在代理之间的负载分布、资源利用限定、分区复制以及耽误目标。

与 Cruise Control 提供预定义的目标并允许用户自行编写差别,AutoMQ 的自均衡特性 AutoBalancer 通过提供一套美满、颠末充分测试的目标,简化了操作。

图像由作者创建。


图像由作者创建。
为了确保在执行优化目标后保持稳定性,AutoMQ会为检测和优化目标选择合适的阈值和范围。例如,缩小优化目标的范围可以确保处理后的结果更加准确。
某个特定目标大概比其他目标具有更高的优先级。AutoMQ根据优先级将目标分类为硬性目标和软性目标:

在目标管理方面,AutoMQ利用数学模型表现每个目标。每个模型根据特定命学条件指示代理是否满足目标。在某些情况下,实现目标的操作大概有多种选择(例如,将分区从代理A移动到代理B或从代理A移动到代理C,两者都能帮助均衡集群流量)。AutoMQ还利用一个数学系统来决定在给定情况下的最佳决策。每个决策根据相干的目标参数举行评分,得分最高的决策将被执行。
组件

AutoBalancer 的实现主要包罗以下三个组件:

图像由作者创建。

典范过程

图像由作者创建。
接下来,我们深入探讨一下 AutoMQ 自均衡的典范过程:

景象

让我们回顾一下AutoBalancer在差别景象下的行为:
   在云盘算的配景下,“机架”可以指一个可用区。
  
AutoBalancer与Cruise Control的比较

在结束本文之前,让我们来回顾一下AutoBalancer和Cruise Control之间的一些差异:


尾声

感谢您阅读到这里。
在本文中,我们回顾了一些Kafka术语,例如分区副本如何在代理(brokers)之间分布,以及当集群成员变更时为什么需要举行副本重新分布。然后,我们探讨了Kafka在重分布过程中的原生解决方案。
接下来,我们观察了诸如 Cruise Control 等第三方工具如何帮助用户以更方便和强大的方式简化流程。我们发现,AutoMQ 能完全解决重新分配过程中的数据传输问题,由于数据存储在 broker 之外,仅需调解元数据。末了,我们深入探讨了 AutoMQ 的自均衡功能 AutoBalancer。
虽然我们看到 Cruise Control 在 Kafka 重新分配过程中能帮助用户,但焦点问题依旧存在:数据仍需通过网络在 broker 之间传输。而通过创新的架构,AutoMQ 完全将数据存储在对象存储中,使许多 Kafka 操作对用户而言更加简化,尤其是在分区重新分配过程中。当分区被分配到差别 broker 时,仅需调解元数据,从而实现更高效、更加妥当的内部自均衡。

参考文献:

[1] 感谢 AutoMQ 的解决方案架构师与首席布道师 Kaiming Wan 的帮忙。
[2] AutoMQ 官方文档: https://docs.automq.com/automq/what-is-automq/overview
[3] AutoMQ 博客: https://www.automq.com/blog
[4] Confluent, AK 生产情况部署最佳实践: https://docs.confluent.io/platform/current/kafka/post-deployment.html#best-practices-for-ak-production-deployments-in-cp
[5] Kafka Cruise Control GitHub 仓库: https://github.com/linkedin/cruise-control


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4