

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

# 元数据管理
<a name="metadata-management"></a>

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

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

**Topics**
+ [ZooKeeper 模式](#msk-get-connection-string)
+ [Kraft 模式](#kraft-intro)

## ZooKeeper 模式
<a name="msk-get-connection-string"></a>

[Apache ZooKeeper](https://zookeeper.apache.org/) 是 “一项集中式服务，用于维护配置信息、命名、提供分布式同步和提供群组服务。分布式应用程序以某种形式使用所有这些类型的服务”，包括 Apache Kafka。

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

### 使用获取 Apache ZooKeeper 连接字符串 Amazon Web Services 管理控制台
<a name="get-connection-string-console"></a>

1. 在 [https://console.amazonaws.cn/msk/](https://console.amazonaws.cn/msk/) 打开 Amazon MSK 控制台。

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

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

### 使用获取 Apache ZooKeeper 连接字符串 Amazon CLI
<a name="get-connection-string-cli"></a>

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

1. 要获取 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 连接字符串
<a name="get-connection-string-api"></a>

要使用 API 获取 Apache ZooKeeper 连接字符串，请参阅[DescribeCluster](https://docs.amazonaws.cn//msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster)。

## Kraft 模式
<a name="kraft-intro"></a>

Amazon MSK 在 Kafka 版本 3.7.x 中引入了对 KRaft（Apache Kafka Raft）的支持。Apache Kafka 社区开发了 Kraft 来取代 Apache 在 [Apache](#msk-get-connection-string) Kafka 集群中 ZooKeeper进行元数据管理。在 Kraft 模式下，集群元数据在一组 Kafka 控制器中传播，这些控制器是 Kafka 集群的一部分，而不是跨节点传播。 ZooKeeper KRaft 控制器免费提供给用户，并且不需要您进行额外的设置或管理。有关 Kraft [KIP-500](https://cwiki.apache.org/confluence/display/KAFKA/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Managed+Metadata+Quorum)的更多信息，请参阅。

下面是有关 MSK 上的 KRaft 模式的一些注意事项：
+ KRaft 模式仅适用于新集群。创建集群后，无法切换元数据模式。
+ 在 MSK 控制台上，您可以通过选择 Kafka 版本 3.7.x 并在 Kraft-based 集群创建窗口中选中 KraFT 复选框来创建集群。
+ 要使用 MSK API [https://docs.amazonaws.cn/msk/1.0/apireference/clusters.html#CreateCluster](https://docs.amazonaws.cn/msk/1.0/apireference/clusters.html#CreateCluster) 或 [https://docs.amazonaws.cn/MSK/2.0/APIReference/v2-clusters.html#CreateClusterV2](https://docs.amazonaws.cn/MSK/2.0/APIReference/v2-clusters.html#CreateClusterV2) 操作在 Kraft 模式下创建集群，应使用 `3.7.x.kraft` 作为版本。`3.7.x`用作在 ZooKeeper 模式下创建集群的版本。
+ 在 Kraft 和 ZooKeeper 基于 Kraft 的集群上，每个代理的分区数量是相同的。但是，KRaft 允许您通过[在集群中预置更多代理](https://docs.amazonaws.cn/msk/latest/developerguide/limits.html)来在每个集群中托管更多分区。
+ 在 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 版本](supported-kafka-versions.md)。
+ 你应该检查你使用的任何工具是否能够在没有 ZooKeeper 连接的情况下使用 Kafka Admin API。有关将集群连接到 Cruise Control 的更新步骤，请参阅 [在 Amazon LinkedIn MSK 上使用 Apache Kafka 的巡航控制系统](cruise-control.md)。Cruise Control 还提供了[不带巡航控制系统的运行](https://github.com/linkedin/cruise-control/wiki/Run-without-ZooKeeper)说明 ZooKeeper。
+ 您无需直接访问集群的 KRaft 控制器即可执行任何管理操作。但是，如果使用开放监控来收集指标，您还需要控制器的 DNS 端点来收集有关集群的一些非控制器相关指标。您可以从 MSK 控制台或使用 [ListNodes](https://docs.amazonaws.cn/msk/1.0/apireference/clusters-clusterarn-nodes.html#ListNodes)API 操作获取这些 DNS 终端节点。有关[使用 Prometheus 监控预置 MSK 集群](open-monitoring.md)为 KRaft-based 集群设置开放式监控的更新步骤，请参阅。
+ 与模式集群相比 ZooKeeper ，您无需监控 Kraft 模式集群的其他[CloudWatch 指标](https://docs.amazonaws.cn/msk/latest/developerguide/metrics-details.html)。MSK 管理您的集群中使用的 KRaft 控制器。
+ 在 Kraft 模式集群中，您可以使用 `--bootstrap-server` 连接字符串继续管理 ACL。不应使用 `--zookeeper` 连接字符串来管理 ACL。请参阅[Apache Kafka ACL](msk-acls.md)。
+ 在 Kraft 模式下，集群的元数据存储在 Kafka 中的 Kraft 控制器上，而不是存储在外部节点上。 ZooKeeper 因此，您无需像控制节点那[样单独控制对控制器 ZooKeeper 节点的](https://docs.amazonaws.cn/msk/latest/developerguide/zookeeper-security.html)访问。