View a markdown version of this page

元数据管理 - Amazon Managed Streaming for Apache Kafka

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

元数据管理

亚马逊 MSK 支持 Apache ZooKeeper 或 Kraft 元数据管理模式。

从亚马逊 MSK 上的 Apache Kafka 3.7.x 版本开始,你可以创建使用 Kraft 模式代替模式的集群。 ZooKeeper KRaft-based 集群依赖 Kafka 中的控制器来管理元数据。

ZooKeeper 模式

Apache ZooKeeper 是 “一项集中式服务,用于维护配置信息、命名、提供分布式同步和提供群组服务。分布式应用程序以某种形式使用所有这些类型的服务”,包括 Apache Kafka。

如果您的集群正在使用 ZooKeeper 模式,则可以使用以下步骤获取 Apache ZooKeeper 连接字符串。但是,我们建议您使用 BootstrapServerString 连接到您的集群并执行管理员操作,因为 --zookeeper 标志已在 Kafka 2.5 中被弃用,并已从 Kafka 3.0 中移除。

使用获取 Apache ZooKeeper 连接字符串 AWS 管理控制台

  1. https://console.aws.amazon.com/msk/ 打开 Amazon MSK 控制台。

  2. 该表显示了此账户下当前区域的所有集群。选择集群名称以查看其说明。

  3. 集群摘要页面上,选择查看客户端信息。这显示了引导程序代理以及 Apache ZooKeeper 连接字符串。

使用获取 Apache ZooKeeper 连接字符串 AWS CLI

  1. 如果您不知道集群的 Amazon 资源名称 (ARN),您可以通过列出您账户中的所有集群来找到它。有关更多信息,请参阅 列出 Amazon MSK 集群

  2. 要获取 Apache ZooKeeper 连接字符串以及有关集群的其他信息,请运行以下命令,ClusterArn替换为集群的 ARN。

    aws kafka describe-cluster --cluster-arn ClusterArn

    describe-cluster 命令的输出如以下 JSON 示例所示。

    { "ClusterInfo": { "BrokerNodeGroupInfo": { "BrokerAZDistribution": "DEFAULT", "ClientSubnets": [ "subnet-0123456789abcdef0", "subnet-2468013579abcdef1", "subnet-1357902468abcdef2" ], "InstanceType": "kafka.m5.large", "StorageInfo": { "EbsStorageInfo": { "VolumeSize": 1000 } } }, "ClusterArn": "arn:aws:kafka:us-east-1:111122223333:cluster/testcluster/12345678-abcd-4567-2345-abcdef123456-2", "ClusterName": "testcluster", "CreationTime": "2018-12-02T17:38:36.75Z", "CurrentBrokerSoftwareInfo": { "KafkaVersion": "2.2.1" }, "CurrentVersion": "K13V1IB3VIYZZH", "EncryptionInfo": { "EncryptionAtRest": { "DataVolumeKMSKeyId": "arn:aws:kms:us-east-1:555555555555:key/12345678-abcd-2345-ef01-abcdef123456" } }, "EnhancedMonitoring": "DEFAULT", "NumberOfBrokerNodes": 3, "State": "ACTIVE", "ZookeeperConnectString": "10.0.1.101:2018,10.0.2.101:2018,10.0.3.101:2018" } }

    上一 JSON 示例在 describe-cluster 命令输出中显示 ZookeeperConnectString 键。复制与此键对应的值,并保存它以用于在集群上创建主题。

    重要

    您的 Amazon MSK 集群必须处于ACTIVE状态才能获取 Apache ZooKeeper 连接字符串。当集群仍处于 CREATING 状态时,describe-cluster 命令的输出不包含 ZookeeperConnectString。如果发生这种情况,请等待几分钟,然后在集群进入 ACTIVE 状态后再次运行 describe-cluster

使用 API 获取 Apache ZooKeeper 连接字符串

要使用 API 获取 Apache ZooKeeper 连接字符串,请参阅DescribeCluster

Kraft 模式

Amazon MSK 在 Kafka 版本 3.7.x 中引入了对 KRaft(Apache Kafka Raft)的支持。Apache Kafka 社区开发了 Kraft 来取代 Apache 在 Apache Kafka 集群中 ZooKeeper进行元数据管理。在 Kraft 模式下,集群元数据在一组 Kafka 控制器中传播,这些控制器是 Kafka 集群的一部分,而不是跨节点传播。 ZooKeeper KRaft 控制器免费提供给用户,并且不需要您进行额外的设置或管理。有关 Kraft KIP-500的更多信息,请参阅。

下面是有关 MSK 上的 KRaft 模式的一些注意事项:

  • KRaft 模式仅适用于新集群。创建集群后,无法切换元数据模式。

  • 在 MSK 控制台上,您可以通过选择 Kafka 版本 3.7.x 并在 Kraft-based 集群创建窗口中选中 KraFT 复选框来创建集群。

  • 要使用 MSK API CreateClusterCreateClusterV2 操作在 Kraft 模式下创建集群,应使用 3.7.x.kraft 作为版本。3.7.x用作在 ZooKeeper 模式下创建集群的版本。

  • 在 Kraft 和 ZooKeeper 基于 Kraft 的集群上,每个代理的分区数量是相同的。但是,KRaft 允许您通过在集群中预置更多代理来在每个集群中托管更多分区。

  • 在 Amazon MSK 上使用 KRaft 模式不需要进行任何 API 更改。但是,如果您的客户端今天仍在使用 --zookeeper 连接字符串,则应更新您的客户端,以使用 --bootstrap-server 连接字符串连接到您的集群。--zookeeper 标志在 Apache Kafka 2.5 版中已弃用,并从 Kafka 3.0 版开始移除。因此,我们建议您对与集群的所有连接使用最新的 Apache Kafka 客户端版本和 --bootstrap-server 连接字符串。

  • ZooKeeper 模式继续适用于所有已发布的版本,其中 Apache Kafka 也支持 zookeeper。有关 Apache Kafka 版本终止支持和未来更新的详细信息,请参阅支持的 Apache Kafka 版本

  • 你应该检查你使用的任何工具是否能够在没有 ZooKeeper 连接的情况下使用 Kafka Admin API。有关将集群连接到 Cruise Control 的更新步骤,请参阅 在 Amazon LinkedIn MSK 上使用 Apache Kafka 的巡航控制系统。Cruise Control 还提供了不带巡航控制系统的运行说明 ZooKeeper。

  • 您无需直接访问集群的 KRaft 控制器即可执行任何管理操作。但是,如果使用开放监控来收集指标,您还需要控制器的 DNS 端点来收集有关集群的一些非控制器相关指标。您可以从 MSK 控制台或使用 ListNodesAPI 操作获取这些 DNS 终端节点。有关使用 Prometheus 监控预置 MSK 集群为 KRaft-based 集群设置开放式监控的更新步骤,请参阅。

  • 与模式集群相比 ZooKeeper ,您无需监控 Kraft 模式集群的其他CloudWatch 指标。MSK 管理您的集群中使用的 KRaft 控制器。

  • 在 Kraft 模式集群中,您可以使用 --bootstrap-server 连接字符串继续管理 ACL。不应使用 --zookeeper 连接字符串来管理 ACL。请参阅Apache Kafka ACL

  • 在 Kraft 模式下,集群的元数据存储在 Kafka 中的 Kraft 控制器上,而不是存储在外部节点上。 ZooKeeper 因此,您无需像控制节点那样单独控制对控制器 ZooKeeper 节点的访问。