元数据管理 - Amazon Managed Streaming for Apache Kafka
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

元数据管理

Amazon MSK 支持 Apache ZooKeeper 或 KRaft 元数据管理模式。

从 Amazon MSK 上的 Apache Kafka 版本 3.7.x 开始,您可以创建 KRaft 使用模式代替模式的集群。 ZooKeeper KRaft基于 Kafka 的集群依靠 Kafka 内的控制器来管理元数据。

ZooKeeper 模式

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

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

使用获取 Apache ZooKeeper 连接字符串 Amazon Web Services Management Console

  1. https://console.amazonaws.cn/msk/ 打开 Amazon MSK 控制台。

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

  3. 集群摘要页面上,选择查看客户端信息。此操作会显示引导代理和 Apache ZooKeeper 连接字符串。

使用获取 Apache ZooKeeper 连接字符串 Amazon 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 ZooKeeper Kafka 集群中的元数据管理。在 KRaft 模式下,集群元数据在 Kafka 集群的一组 Kafka 控制器内传播,而不是跨节点传播。 ZooKeeper KRaft控制器免费提供给用户,并且不需要您进行额外的设置或管理。有关更多信息,请参阅 KIP-500 KRaft。

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

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

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

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

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

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

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

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

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

  • 对于 KRaft 模式集群,您不需要监控模式集群的 ZooKeeper 其他CloudWatch 指标。MSK 管理您的集群中使用的 KRaft 控制器。

  • 您可以使用--bootstrap-server连接字符串在 KRaft 模式下 ACLs 使用集群继续进行管理。不应使用--zookeeper连接字符串进行管理 ACLs。请参阅阿帕奇Kafka a ACLs

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