新闻中心

  • 首页 新闻中心 在 AWS 大数据博客中介绍对 Apache Kafka Raft 模式 (KRaft) 的支持,适

在 AWS 大数据博客中介绍对 Apache Kafka Raft 模式 (KRaft) 的支持,适

2026-01-27 13:35:01

支持 Apache Kafka Raft 模式 (KRaft) 的 Amazon MSK 集群

由 Kalyan Janaki 于 2024 年 5 月 29 日发布在Amazon Managed Streaming for Apache Kafka (Amazon MSK)类别中。

重点总结

Amazon MSK 现已支持 KRaft 模式,从 Apache Kafka 37 版本开始提供。KRaft 替代了对 ZooKeeper 的依赖,提高了元数据管理的效率。用户在创建 MSK 集群时可以选择 KRaft 模式,并在连接应用程序时需更新配置。

随着组织越来越多地采用 Apache Kafka 和Amazon Managed Streaming for Apache KafkaAmazon MSK,实时捕获与分析数据变得越来越普及。Amazon MSK 可以帮助用户构建和运行生产应用,无需深入管理 Kafka 基础设施或处理设置和运行 Apache Kafka 的复杂性。自 Apache Kafka 创立以来,它一直依赖 Apache ZooKeeper 来存储和复制 Kafka 代理及主题的元数据。然而,从 Apache Kafka 33 版本开始,Kafka 社区引入了 KRaftApache Kafka on Raft,这个共识协议旨在取代 ZooKeeper 在元数据管理中的依赖。未来,Apache Kafka 社区计划完全去除 ZooKeeper 模式。

今天,我们很高兴宣布在 Amazon MSK 上正式支持 KRaft,起始版本为 37。本文将为您详细介绍 KRaft 模式相对于 ZooKeeper 的优势,并指导您如何创建 KRaft 模式的 MSK 集群以及将应用程序连接到该集群。

为什么用 KRaft 模式替代 ZooKeeper

传统的 Kafka 架构依赖 ZooKeeper 作为集群元数据的权威来源。ZooKeeper 中的元数据的读写访问通过单个 Kafka 控制器进行。在具有大量分区的集群中,这种架构可能会在某些场景下形成瓶颈,例如无控制的代理关机或控制器故障切换。

cyberghost安卓版下载

KRaft 模式通过在 Kafka 集群内管理元数据来解决这些局限性。KRaft 模式不再依赖单独的 ZooKeeper 集群,而是将集群元数据存储并复制到多个 Kafka 控制器节点中,形成一个元数据仲裁。KRaft 控制器节点组成了一个 Raft 仲裁团,负责管理 Kafka 元数据日志。通过将元数据管理责任分散到多个控制器节点,KRaft 模式提升了在无控制的代理关机或控制器故障切换等场景下的恢复时间。关于 KRaft 模式及其实现的更多细节,请参考KIP500 用自管理的元数据仲裁替换 ZooKeeper。

以下图表比较了使用 ZooKeeper 的三节点 MSK 集群架构与 KRaft 模式的区别。

Amazon MSK 的 KRaft 模式

迄今为止,Amazon MSK 仅支持依赖 ZooKeeper 进行元数据管理的 Kafka 集群。Amazon MSK 的一大优势在于它能够以无额外成本处理设置和管理 ZooKeeper 集群的复杂性。许多组织使用 Amazon MSK 来运行大型对业务至关重要的流处理应用,这些应用需要在成千上万个分区中分配流量。随着 Kafka 集群规模的扩大,集群内生成的元数据量也会按比例增加。

在 AWS 大数据博客中介绍对 Apache Kafka Raft 模式 (KRaft) 的支持,适

两个关键属性决定了 Kafka 集群所能支持的分区数量:每个节点的分区计数限制和集群整体的分区限制。正如前面提到的,基于 ZooKeeper 的元数据管理系统会对 Apache Kafka 的集群整体分区限制形成瓶颈。然而,自从引入 KRaft 模式后,Amazon MSK 现在允许创建最多 60 个代理的集群,而 ZooKeeper 模式下的默认配额仅为 30 个代理。Kafka 的可扩展性仍然实质上依赖于通过添加更多节点来扩展集群,以提高整体容量。因此,集群整体分区限制依然界定了 Kafka 系统内可扩展性的上限,因为它决定了可以在可用节点中分配的最大分区数量。Amazon MSK 将 KRaft 控制器节点的管理维护在无额外成本的条件下进行。

创建并访问 KRaft 模式的 MSK 集群

按照以下步骤配置使用 KRaft 模式的 MSK 集群:

登录 Amazon MSK 控制台,在导航窗格中选择 集群。选择 创建集群。对于 集群创建方法 ,选择 自定义创建。

在 集群名称 处输入名称。

对于 集群类型 ,选择 预配置。

在 Apache Kafka 版本 中,选择 37x。

在 元数据模式 中,选择 KRaft。

其他设置保持默认,然后选择 创建集群。

当集群创建成功后,您可以导航至该集群,选择 查看客户端整合信息 ,这将提供集群启动服务器的详细信息。

适配客户端应用及工具以访问 KRaft 模式的 MSK 集群

随着 Amazon MSK 中 KRaft 模式的采用,使用连接到 ZooKeeper 的客户端应用和工具的客户需要对其进行更新,以反映架构中 ZooKeeper 的移除。从 10 版开始,Kafka 引入了让管理工具使用启动服务器代理作为输入参数的能力,而不是使用 ZooKeeper 连接字符串,并从 25 版本开始逐步弃用 ZooKeeper 连接字符串。这一变化是为了将 Kafka 与 ZooKeeper 解耦,并为将其最终替换为 KRaft 模式铺平道路。客户需要使用 bootstrapservers 配置选项直接连接 Kafka 代理,而不是指定 ZooKeeper 连接字符串。以下表格总结了这些变化:

使用 ZooKeeper使用 KRaft客户端和服务bootstrapservers=brokerltportgt 或 zookeeperconnect=zookeeper2181已弃用管理工具kafkatopics zookeeper zookeeper2181已弃用或 kafkatopics bootstrapserver brokerltportgt commandconfig

总结

在本文中,我们探讨了 Amazon MSK 如何推出 KRaft 模式以支持元数据管理,我们还描述了 KRaft 的工作原理以及它与 ZooKeeper 的不同之处。

要入门,请使用AWS 管理控制台创建一个新的 KRaft 模式集群,并参考Amazon MSK 开发者指南以获取更多信息。

关于作者

Kalyan Janaki是亚马逊网络服务的高级大数据与分析专家,致力于帮助客户在 AWS 上架构和构建高度可扩展、高性能和安全的云端解决方案。