一般性问题
Amazon Managed Streaming for Apache Kafka(Amazon MSK)是一种 AWS 流数据服务,可管理 Apache Kafka 基础设施和运营,让开发人员和 DevOps 经理可以轻松地在 AWS 上运行 Apache Kafka 应用程序和 Apache Kafka Connect 连接器,而无需成为运行 Apache Kafka 方面的专家。Amazon MSK 运营、维护和扩展 Apache Kafka 集群,提供开箱即用的企业级安全功能,并具有内置的 AWS 集成,可加速流数据应用程序的开发。首先,您可以将现有 Apache Kafka 工作负载和 Apache Kafka Connect 连接器迁移到 Amazon MSK,或者只需单击几下,您便可以从头开始构建新的工作负载和连接器。集群内流量没有数据传输费用,也不需要承诺或预付款。您只需为使用的资源付费。
Apache Kafka 是一个开源、高性能、可容错且可扩展的平台,用于构建实时流数据管道和应用程序。Apache Kafka 是一个流数据存储,它将生成流数据的应用程序(生产者)与从其数据存储中使用流数据的应用程序(使用者)分离到其数据存储中。组织使用 Apache Kafka 作为持续分析和响应流数据的应用程序的数据源。 了解有关 Apache Kafka 的更多信息。
Apache Kafka Connect 是 Apache Kafka 的开源组件,是连接 Apache Kafka 与数据库、键值存储、搜索索引和文件系统等外部系统的框架。
流数据是由数千台机器、设备、网站和应用程序生成的连续的较小记录或事件流(一个记录或事件通常为几千字节)。流数据包括多种数据,例如客户使用您的移动或 Web 应用程序生成的日志文件、网购数据、游戏内玩家活动、社交网站信息、金融交易大厅、地理空间服务,安全日志、指标,以及来自数据中心内所连接设备或仪器的遥测数据。流数据服务(如 Amazon MSK 和 Amazon Kinesis Data Streams)使您可以轻松地持续收集、处理和提供流数据。 了解有关流数据的更多信息。
- Apache Kafka 以容错的方式存储流数据,在生产者和消费者之间提供缓冲区。它将事件存储为一系列连续的记录,并保留记录的生成顺序。
- Apache Kafka 允许许多数据生产者(例如网站、物联网 (IoT) 设备、Amazon Elastic Compute Cloud (Amazon EC2) 实例)持续发布流数据并使用 Apache Kafka 主题对这些数据进行分类。多个数据使用者(例如机器学习应用程序、AWS Lambda 函数或微服务)以自己的速率从这些主题中读取,类似于消息队列或企业消息收发系统。
- 数据使用者以先进先出的方式处理来自 Apache Kafka 主题的数据,从而保留数据的生成顺序。
Apache Kafka 支持转换、传输和响应流数据的实时应用程序,还可用于构建可在多个系统或应用程序之间可靠地发送数据的实时流数据管道。
只需在控制台中单击几下,即可创建 Amazon MSK 集群。创建完成后,Amazon MSK 将取代运行状况不佳的代理,自动复制数据以获得高可用性,管理 Apache ZooKeeper 节点,根据需要自动部署硬件补丁,管理与 AWS 服务的集成,通过控制台显示重要指标,并且支持 Apache Kafka 版本升级,因此您可以利用对 Apache Kafka 的开源版本所做的改进。
是的,Amazon MSK 原生支持所有数据层面和管理 API。
可以。
是,Apache Kafka 客户端可以免费使用 AWS Glue 的一项无服务器功能 AWS Glue Schema Registry。访问 Schema Registry 用户文档开启使用并了解更多信息。
Amazon MSK 现在支持基于 Graviton 3 的 M7g 实例,从 large 到 16xlarge 大小不等,以运行所有 Apache Kafka 工作负载。Graviton 实例具有与 MSK 相同的可用性和耐久性优势,与相应的 M5 实例相比,成本可降低多达 24%。与 MSK 的 M5 实例相比,Graviton 实例的每个实例吞吐量可提高多达 29%,使客户能够使用较少的代理或更小的实例运行 MSK 集群。
MSK 无服务器
问:什么是 MSK 无服务器?
MSK 无服务器是 Amazon MSK 的一种集群类型,它可以帮助您轻松运行 Apache Kafka 集群,无需管理计算和存储容量。使用 MSK 无服务器,您可以轻松运行您的应用程序,而无需预置、配置或优化集群,并且您只需按您流式传输和保留的数据量付费。
问:MSK 无服务器是否在集群中自动均衡分区?
是。MSK 无服务器可以全面管理分区,包括监控和移动分区,甚至跨集群加载分区。
问:MSK 无服务器支持的数据吞吐量是多少?
MSK 无服务器针对每个集群提供高达 200 MBps 的写入容量和 400 MBps 的读取容量。此外,为确保集群中所有分区都有足够的吞吐量可用,MSK 无服务器为每个分区分配了高达 5 MBps 的即时写入容量和 10 MBps 的即时读取容量。
问:MSK 无服务器提供哪些安全功能?
MSK 无服务器使用通过 AWS Key Management Service (KMS) 发出的服务托管式密钥加密传输中的所有流量和所有静态数据。客户端通过使用 AWS PrivateLink 的私有连接连接到 MSK 无服务器,不会将您的流量暴露给公有网络。此外,MSK 无服务器提供 IAM 访问控制,您可以使用它来管理对 Apache Kafka 资源(如主题)的客户端身份验证和客户端授权。
问:生产者和使用者如何访问我的 MSK 无服务器集群?
在创建 MSK 无服务器集群时,您提供一个或多个托管该集群客户端的 Amazon Virtual Private Cloud (VPC) 的子网。在这些 VPC 中托管的客户端将能够使用其代理引导字符串连接到 MSK 无服务器集群。
问:MSK 无服务器可用的区域有哪些?
请参阅 MSK 定价页面,了解最新的区域可用性。
问:MSK 无服务器支持哪些身份验证类型?
MSK 无服务器目前支持 AWS IAM 进行客户端身份验证和授权。您的客户端可以承担 AWS IAM 角色进行身份验证,并且您可以使用关联的 IAM 策略实施访问控制。
问:如何处理 MSK 无服务器集群中的数据?
您可以使用任何与 Apache Kafka 兼容的工具来处理 MSK 无服务器集群主题中的数据。MSK 无服务器与适用于 Apache Flink 的亚马逊托管服务集成,用于有状态的流处理;并与 AWS Lambda 集成,用于事件处理。您还可以使用 Apache Kafka Connect 接收器连接器将数据发送到任何所需的目标。
问:MSK 无服务器如何确保高可用性?
创建分区时,MSK 无服务器会创建分区的 2 个副本,并将它们放置在不同的可用区中。此外,MSK 无服务器会自动检测和恢复失败的后端资源,以保持高可用性。
数据生产和使用
问:是否可以使用 Apache Kafka API 在 Apache Kafka 中存取数据?
可以,Amazon MSK 支持原生 Apache Kafka 生产者和使用者 API。当客户开始使用 Amazon MSK 中的集群时,您的应用程序代码无需更改。
问:是否可以将 Apache Kafka Connect、Apache Kafka Streams 或 Apache Kafka 的任何其他生态系统组件与 Amazon MSK 一起使用?
是的,您可以使用任何利用 Apache Kafka 生产者和使用者 API 以及 Apache Kafka Admin Client 的组件。将 .jar 文件上载到 Apache Kafka 集群的工具目前与 Amazon MSK 不兼容,其中包括 Confluent Control Center、Confluent Auto Data Balancer 和 Uber uReplicator。
迁移到 Amazon MSK
是的,您可以使用第三方工具或 Apache Kafka 支持的开源工具(如 MirrorMaker)将集群中的数据复制到 Amazon MSK 集群。以下是可帮助您完成迁移的 Amazon MSK 迁移实验室。
版本升级
问:是否支持 Apache Kafka 版本升级?
是的,Amazon MSK 针对预置的集群支持完全托管式就地 Apache Kafka 版本升级。要了解有关升级 Apache Kafka 版本和高可用性最佳实践的更多信息,请参阅版本升级文档。
集群
只需在 AWS 管理控制台中单击几下或使用 AWS 开发工具包,即可创建第一个集群。首先,在 Amazon MSK 控制台中,选择要在其中创建 Amazon MSK 集群的 AWS 区域。选择集群的名称、要在其中运行集群的 Virtual Private Cloud (VPC) 以及每个可用区的子网。如果您正在创建预置的集群,您还可以选择代理实例类型、每个可用区的代理数量以及每个代理的存储。
预置的集群都包含代理实例、预置的存储和抽象的 Apache ZooKeeper 节点。无服务器集群本身就是一种资源,它们抽离了所有基础资源。
对于预置的集群,您可以选择 EC2 T3.small 或 EC2 M7g 和 M5 实例系列中的实例。对于无服务器集群,代理是完全抽象的。
目前不可以。
不需要,您预置的每个代理都包括由 Amazon MSK 服务托管的启动卷存储。
某些资源将显示在您的 Amazon EC2 账户中,如弹性网络接口 (ENI)。其他 Amazon MSK 资源不会显示在您的 EC2 账户中,因为这些资源由 Amazon MSK 服务托管。
对于预置的集群,您需要为您创建的每个集群预置代理实例和代理存储。您可以选择为存储卷预置存储吞吐量,这可以用于无缝扩展输入/输出,而无需预置其他代理。您不需要预置 Apache ZooKeeper 节点,因为您创建的每个集群都免费包含这些资源。对于无服务器集群,您只需创建一个作为资源的集群。
除非另有说明,否则 Amazon MSK 使用 Apache Kafka 开源版本指定的原定设置。 此处记录了这两种集群类型的原定设置。
主题
创建 Apache Kafka 集群后,您可以使用 Apache Kafka API 创建主题。使用 Apache Kafka API 执行所有主题和分区级别操作和配置。下面的命令是使用 Apache Kafka API 创建主题的示例以及可用于您的集群的配置详细信息:
bin/kafka-topics.sh --create —bootstrap-server <BootstrapBrokerString> --replication-factor 3 --partitions 1 --topic TopicName
联网
问:Amazon MSK 是否在 Amazon VPC 中运行?
是的,Amazon MSK 始终在由 Amazon MSK 服务托管的 Amazon VPC 中运行。Amazon MSK 资源将可用于您在设置集群时选择的自己的 Amazon VPC、子网和安全组。VPC 中的 IP 地址会通过弹性网络接口 (ENI) 挂载到您的 Amazon MSK 资源,并且在默认情况下,所有网络流量均保持在 AWS 网络内,且无法通过互联网访问。
问:VPC 中的客户端如何访问 Amazon MSK 集群中的代理?
VPC 中的客户端可通过您账户中显示的 ENI 访问集群中的代理。ENI 上的安全组将决定您的代理上允许的传入和传出流量的来源和类型。
问:是否可以通过公有网络连接到我的集群?
是的,Amazon MSK 提供一种选项,可用于通过互联网安全地连接到运行 Apache Kafka 2.6.0 或更高版本的 Amazon MSK 集群的代理。通过启用公开访问,私有 Amazon Virtual Private Cloud (VPC) 外部的授权客户端可以将加密数据传入和传出特定的 Amazon MSK 集群。您可以在集群创建后免费为 MSK 集群启用公开访问,集群入口和出口将按标准 AWS 数据传输成本计费。要了解有关开启公开访问的更多信息,请参阅公开访问文档。
问:我的客户端和 Amazon MSK 集群之间的连接是否是私有的?
默认情况下,从 Amazon MSK 集群生成和使用数据的唯一方式是通过 VPC 中的客户端与 Amazon MSK 集群之间的私有连接。但是,如果您为 Amazon MSK 集群开启公开访问并使用公有引导代理字符串连接到 MSK 集群,连接将不再视为私有,即使经过了身份验证、授权和加密。我们建议您将集群的安全组配置为具有入站 TCP 规则,允许从您信任的 IP 地址进行公开访问,并在开启公开访问时尽可能限制这些规则。
连接到 VPC
问:如何通过互联网连接到我的 Amazon MSK 集群?
最简单的方法是通过互联网开启至运行 Apache Kafka 2.6.0 或更高版本的 MSK 集群代理的公有连接。出于安全原因,您不能在创建 MSK 集群时开启公共访问。但是,您可以更新现有集群使其可公开访问。您还可以创建新的集群,然后将其更新为可公开访问。要了解有关开启公开访问的更多信息,请参阅公开访问文档。
问:如何从 AWS 网络内部但在集群的 Amazon VPC 外部连接到我的 Amazon MSK 集群?
您可以通过为运行 Apache Kafka 2.7.1 或更高版本的 MSK 集群开启多 VPC 私有连接,从与 MSK 集群不同的任何 VPC 或 AWS 账户连接您的 MSK 集群。您只能在为任何支持的身份验证方案(IAM 身份验证、SASL SCRAM 和 mTLS 身份验证)创建集群后开启私有连接。您应将客户端配置为使用 Amazon MSK 托管 VPC 连接私有连接到集群,该连接使用 AWS PrivateLink 技术启用私有连接。要了解有关设置私有连接的更多信息,请参阅从 AWS 文档中访问。
加密
问:我能否加密我的 Amazon MSK 集群中的数据?
能,Amazon MSK 使用 Amazon Elastic Block Store (Amazon EBS) 服务器端加密和 AWS Key Management Service (AWS KMS) 密钥来加密存储卷。
问:在 Amazon MSK 集群内的代理之间,数据是否进行传输中加密?
是,根据原定设置,新集群已通过代理间通信的 TLS 启用了传输中加密。对于预置的集群,您可以在创建集群时选择不使用传输中加密。
问:我的 Apache Kafka 客户端和 Amazon MSK 服务之间是否在传输中加密数据?
是的,根据原定设置,将传输中加密设置为 TLS 仅适用于通过 CLI 或 AWS 管理控制台创建的集群。客户端需要其他配置才能使用 TLS 加密与集群通信。对于预置的集群,您可以通过选择 TLS/纯文本或纯文本设置来更改加密原定设置。阅读有关 MSK 加密的更多信息。
问:当数据在 Amazon MSK 集群中的代理和 Apache ZooKeeper 节点之间移动时,是否可以在传输中加密?
可以,运行 Apache Kafka 版本 2.5.1 或更高版本的 Amazon MSK 集群支持在 Apache Kafka 代理与 ZooKeeper 节点之间进行 TLS 传输中加密。
访问管理
问:如何控制集群身份验证和 Apache Kafka API 授权?
对于无服务器集群,您可以使用 IAM 访问控制进行身份验证和授权。对于预置的集群,您可以从以下三种访问控制选项中选择使用:1) 适用于 AuthN/Z 的 AWS Identity and Access Management (IAM) 访问控制(推荐),2) 适用于 AuthN 的 TLS 证书身份验证 (CA) 和适用于 AuthZ 的访问控制列表,以及 3) 适用于 AuthN 的 SASL/SCRAM 和适用于 AuthZ 的访问控制列表。Amazon MSK 推荐使用 IAM 访问控制。它最容易使用,而且它原定设置为最低权限访问,是最安全的选项。
问:授权在 Amazon MSK 中的工作原理是什么?
如果您使用 IAM 访问控制,Amazon MSK 会使用您编写的策略及其自己的授权方对操作进行授权。若您使用 TLS 证书身份验证或 SASL/SCRAM,Apache Kafka 则会使用访问控制列表 (ACL) 进行授权。要启用 ACL,您必须启用使用 TLS 证书或 SASL/SCRAM 的客户端身份验证。
问:我如何同时对客户端进行身份验证和授权?
如果您使用 IAM 访问控制,Amazon MSK 将为您进行身份验证和授权,而不需要任何额外设置。如果使用的是 TLS 身份验证,您可以使用客户端 TLS 证书的 Dname 作为 ACL 的委托人对客户端请求进行授权。如果使用的是 SASL/SCRAM,您可以使用用户名作为 ACL 的委托人对客户端请求进行授权。
问:如何控制服务 API 操作?
您可以使用 AWS Identity and Access Management (IAM) 控制服务 API。
问:我可以为现有集群启用 IAM 访问控制吗?
是的,您可以从 AWS 控制台或通过更新安全 API 为现有集群启用 IAM 访问控制。
问:我可以在 Amazon MSK 外部使用 IAM 访问控制吗?
不可以,IAM 访问控制仅适用于 Amazon MSK 集群。
问:如何向与 Amazon MSK 不同的 AWS 账户中的 Apache Kafka 客户端提供跨账户访问权限,以便私有连接到我的 Amazon MSK 集群?
您可以将集群策略附加到 Amazon MSK 集群,为您的跨账户 Apache Kafka 客户端提供设置与 Amazon MSK 集群的私有连接的权限。使用 IAM 客户端身份验证时,您还可以使用集群策略来精细定义连接客户端的 Apache Kafka 数据面板权限。要了解有关集群策略的更多信息,请参阅集群策略文档。
监控、指标、日志记录和标记
您可以通过 Amazon MSK 控制台、Amazon CloudWatch 控制台或 JMX 监控集群的性能,并使用带有 Prometheus(一种开源监控解决方案)的开放监控功能来监控主机指标。
问:不同 CloudWatch 监控级别的成本是多少?
使用 Amazon CloudWatch 监控集群的成本取决于监控级别和您的 Apache Kafka 集群大小。Amazon CloudWatch 按每月每个指标收费并且包含免费套餐;请参阅 Amazon CloudWatch 定价了解更多信息。有关每个监控级别公开的指标数量的详细信息,请参阅 Amazon MSK 监控文档。
问:哪些监控工具与带有 Prometheus 的开放监控功能兼容?
设计用于从 Prometheus 导出器读取数据的工具可与开放监控功能兼容,例如: Datadog、 Lenses、 New Relic、 Sumo Logic 或 Prometheus 服务器。有关开放监控功能的详细信息,请参阅 Amazon MSK 开放监控功能文档。
问:如何监控客户端的运行状况和性能?
您可以使用您正在使用的 Apache Kafka 版本支持的任何客户端监控。
问:我能否标记 Amazon MSK 资源?
可以,您可以通过 AWS Command Line Interface (AWS CLI) 或控制台标记 Amazon MSK 集群。
问:如何监控使用器延迟情况?
主题级使用器延迟指标作为 Amazon MSK 对所有集群发布到 Amazon CloudWatch 的原定设置指标集的一部分提供。获取这些指标无需进行额外的设置。对于预置的集群,您还可以获取分区级使用器延迟指标(分区维度)。为此,请启用集群上的增强型监控 (PER_PARTITION_PER_TOPIC)。或者,您可以在集群上启用开放监控功能,并使用 Prometheus 服务器从集群中的代理中获取分区级指标。使用器延迟指标与其他的 Apache Kafka 指标一样,在端口 11001 提供。
问:将使用器延迟指标发布到 Amazon CloudWatch 的费用是多少?
主题级指标包含在原定设置的 Amazon MSK 指标集中,后者是免费的。分区级指标根据 Amazon CloudWatch 定价进行收费。
问:我该如何访问 Apache Kafka 代理日志?
您可以对预置的集群启用代理日志传送。您可以将代理日志传送到 Amazon CloudWatch Logs、Amazon Simple Storage Service (S3) 和 Amazon Kinesis Data Firehose。Kinesis Data Firehose 支持多种传送目的地,包括 Amazon OpenSearch Service。如需了解如何启用此功能,请参阅 Amazon MSK 日志记录文档。如需了解有关定价的信息,请参阅 CloudWatch Logs 和 Kinesis Data Firehose 定价页面。
问:代理日志的日志记录级别是什么?
Amazon MSK 为一个预置集群内的所有代理提供 INFO(信息)级日志。
问:我该如何访问 Apache ZooKeeper 日志?
您可以通过发出支持工单请求获取 Apache ZooKeeper 日志。
问:我可以记录 Apache Kafka 资源 API 使用日志吗,像创建主题那样?
可以,如果您使用 IAM 访问控制,Apache Kafka 资源 API 的使用日志会被记录到 AWS CloudTrail。
元数据管理
问:什么是 Apache ZooKeeper?
根据 https://zookeeper.apache.org/:“Apache ZooKeeper 是一种集中式服务,用于维护配置信息、命名、提供分布式同步和组服务。分布式应用程序会以某种形式使用所有这些类型的服务”,包括 Apache Kafka。
问:Amazon MSK 是否使用 Apache ZooKeeper?
是的,Amazon MSK 使用 Apache ZooKeeper 进行元数据管理。此外,从 Apache Kafka 3.7 版本开始,您可以通过 ZooKeeper 模式或 KRaft 模式创建集群。使用 KRaft 模式创建的集群使用 KRaft 控制器而不是 ZooKeeper 节点进行元数据管理。
问:什么是 KRaft
KRaft(Apache Kafka Raft)是一种共识协议,它将 Apache Kafka 集群中的元数据管理从外部 Apache ZooKeeper 节点转移到 Apache Kafka 内的一组控制器。此更改允许将元数据作为 Apache Kafka 代理中的主题进行存储和复制,从而加快元数据的传播速度。 请参与我们的开发人员指南。
问:与 ZooKeeper 模式相比,在 Amazon MSK 上使用 KRaft 模式是否需要进行任何 API 更改?
无需更改 API 即可在 Amazon MSK 上使用 KRaft 模式。但是,如果您的客户端今天仍然使用 --zookeeper 连接字符串,您应该更新客户端以使用 --bootstrap-server 连接字符串来连接到集群并执行管理操作。--zookeeper 标志在 Apache Kafka 版本 2.5 中已弃用,并从 Apache Kafka 3.0 开始删除。因此,我们建议您使用最新的 Apache Kafka 客户端版本和 --bootstrap-server 连接字符串。
问:我有可以连接到 ZooKeeper 的工具;如果没有 ZooKeeper,这些工具将如何用于 KRaft 集群?
您应该检查使用的任何工具是否能够在没有 ZooKeeper 连接的情况下使用 Apache Kafka 管理员 API。例如,请参阅我们有关对 KRaft 模式集群使用 Cruise Control 的更新后文档。Cruise Control 还发布了在没有 ZooKeeper 连接的情况下运行 Apache Kafka 需要遵循的步骤。
问:与基于 ZooKeeper 的集群相比,我可以在基于 KRaft 的集群上为每个代理托管更多分区吗?
在基于 KRaft 和 ZooKeeper 的集群上,每个代理的分区数量相同。但是,KRaft 允许您通过在集群中配置更多代理来为每个集群托管更多分区。
集成
- Amazon S3 使用 Kinesis Data Firehose 以简单且无需代码的方式将数据从 MSK 传送到 Amazon S3。
- Amazon Virtual Private Cloud(Amazon VPC)(用于网络隔离和安全)
- Amazon CloudWatch(用于指标)
- AWS Key Management Service (AWS KMS)(用于存储卷加密)
- Amazon IAM(用于对 Apache Kafka 和服务 API 进行身份验证和授权)
- AWS Lambda(用于 MSK 事件获取)
- AWS IoT(用于 IoT 事件获取)
- AWS Glue Schema 注册表(用于控制 Apache Kafka 应用程序使用的架构演变)
- AWS CloudTrail(用于 AWS API 日志)
- AWS Certificate Manager(用于客户端 TLS 身份验证中使用的私有 CA)
- AWS CloudFormation,用于使用代码描述和预置 Amazon MSK 集群
- 适用于 Apache Flink 的亚马逊托管服务,用于处理流数据的完全托管式 Apache Flink 应用程序
- 适用于 Apache Flink 的亚马逊托管服务,用于 Apache Kafka 上的交互式流 SQL
- AWS Secrets Manager,用于进行 SASL/SCRAM 身份验证的客户端凭证
- Amazon S3 使用 Kinesis Data Firehose 以简单且无需代码的方式将数据从 MSK 传送到 Amazon S3。
- Amazon VPC(用于网络隔离和安全)
- Amazon CloudWatch(用于指标)
- Amazon IAM(用于对 Apache Kafka 和服务 API 进行身份验证和授权)
- AWS Glue Schema 注册表(用于控制 Apache Kafka 应用程序使用的架构演变)
- AWS CloudTrail(用于 AWS API 日志)
- AWS PrivateLink(用于私有连接)
扩展
您可以使用 AWS 管理控制台或 AWS CLI 纵向扩展预置集群中的存储。您还可以使用分层存储在集群上虚拟存储无限数据,而无需添加代理进行存储。在无服务器集群中,存储可以根据您的使用情况无缝扩展。
Apache Kafka 将数据存储在称为日志段的文件中。每个段完成后,根据在集群或主题级别配置的大小,将其复制到低成本存储层。数据在性能优化存储中保存指定的保留时间或大小,然后删除。低成本存储有单独的时间和大小限制设置,该设置将比主存储层长。如果客户端从存储在低成本层中的段中请求数据,代理将从其中读取数据并提供数据,提供方式与从主存储中提供时相同。
问:我如何自动扩展集群中的存储?
您可以使用 AWS 管理控制台或通过使用 AWS CLI 或 API 创建 AWS Application Auto Scaling 策略来创建存储的自动扩展策略。
问:我是否可以扩展现有集群中的代理数量?
可以。您可以选择增加或减少预置的 Amazon MSK 集群中的代理数量。
问:我是否可以扩展现有集群中的代理大小?
是。您可以选择扩缩预置的 Amazon MSK 集群上代理类型的大小。
问:如何均衡代理间的分区?
您可以使用 Cruise Control 对分区进行自动重新均衡,以便管理 I/O 热量。请参阅 Cruise Control 文档,了解更多信息。此外,您也可以使用 Apache Kafka Admin API kafka-reassign-partitions.sh 来重新分配代理间的分区。在无服务器集群中,Amazon MSK 自动均衡分区。
定价和可用性
问:Amazon MSK 如何定价?
根据您创建的资源定价。访问定价页面了解更多内容。
问:是否因数据复制而需要支付数据传输费用?
不需要,所有集群内数据传输都包含在该服务中,无需额外付费。
问:哪些 AWS 区域提供 Amazon MSK?
Amazon MSK 区域可用性记录在此处。
问:数据传输如何定价?
使用预置的集群时,您需要为传入和传出 Amazon MSK 集群的数据支付标准的 AWS 数据传输费用。您不需要为一个区域中集群内的数据传输支付任何费用,包括代理之间的数据传输以及代理和 Apache ZooKeeper 节点之间的数据传输。
使用无服务器集群时,您需要为传入和传出另一个区域的数据以及传到公有网络的数据支付标准的 AWS 数据传输费用。
合规性
- 符合 HIPAA 要求
- PCI
- ISO
- SOC 1、2、3
有关 AWS 服务和合规性计划的完整列表,请参考 AWS 按合规性计划提供的范围内服务。
服务等级协议
复制
问:什么是 Amazon MSK 复制器?
Amazon MSK 复制器是 Amazon MSK 的一项功能,它使客户能够在不同 AWS 区域(跨区域复制)或同一 AWS 区域(同区域复制)的 Amazon MSK 集群之间可靠地复制数据,而无需编写代码或管理基础设施。您可以使用跨区域复制(CRR)来构建高可用性和容错性的多区域流式处理应用程序,从而提高弹性。您还可以通过 CRR 为不同地理区域的使用者提供更低的延迟访问。您可以使用 SRR 将数据从一个集群分发到多个集群,以便与您的合作伙伴和团队共享数据。您还可以使用 SRR 或 CRR 将来自多个集群的数据聚合到一个集群中进行分析。
问:如何使用 MSK 复制器?
要在一对源集群和目标 MSK 集群之间设置复制,您需要在目标 AWS 区域创建一个 Replicator。要创建 Replicator,您需要指定详细信息,包括源和目标 MSK 集群的 Amazon 资源名称(ARN)以及可供 MSK Replicator 访问集群的 AWS Identity and Access Management(IAM)角色。如果目标 MSK 集群尚不存在,则需要创建一个。您还可以选择配置其他设置,包括主题名称配置和复制器的起始位置。
问:MSK 复制器支持哪种类型的 Kafka 集群?
MSK Replicator 仅支持在 MSK 集群之间进行复制。支持预置和无服务器类型的 MSK 集群。您也可以使用 MSK Replicator 从预置集群移动到无服务器集群或反之。不支持其他 Kafka 集群。
问:我是否可以指定要复制哪些主题?
是的,您可以在创建 Replicator 时使用允许和拒绝列表来指定要复制的主题。
问:MSK Replicator 是否会复制主题设置和使用者组偏移?
是的。MSK Replicator 会自动复制必要的 Kafka 元数据,例如主题配置、访问控制列表(ACL)和使用者组偏移量,以便使用应用程序可以在失效转移后无缝继续处理。如果您只想复制数据,则可以选择关闭其中一项或多项设置。您还可以在创建 Replicator 时使用允许或拒绝列表来指定要复制哪些使用者组。
问:当我的入口吞吐量发生变化时,我是否需要扩展复制?
不需要,MSK Replicator 会自动部署、预置和扩展底层复制基础设施,以支持入口吞吐量的变化。
问:我能否在不同 AWS 账户的 MSK 集群之间复制数据?
不能,MSK Replicator 仅支持在同一 AWS 账户的不同 MSK 集群之间进行复制。
问:如何监控复制?
您可以在目标区域使用 Amazon CloudWatch 查看每个复制器在主题和聚合级别的“ReplicationLatency、MessageLag 和 ReplicatorThroughput”指标,无需支付额外费用。这些指标将在“AWS/Kafka”命名空间中的 ReplicatorName 下可见。您还可以查看“ReplicatorFailure、AuthError 和 ThrottleTime”指标,以了解您的复制器是否遇到了任何问题。
问:我能否使用 MSK 复制器将数据从一个集群复制到多个集群,或者将数据从多个集群复制到一个集群?
是的。您只需要为每个源集群和目标集群对创建不同的 Replicator 即可。
问:MSK Replicator 如何连接到源和目标 MSK 集群?
MSK Replicator 使用 IAM 访问控制连接到您的源集群和目标集群。您需要为创建 Replicator 的 IAM 访问控制开启源和目标 MSK 集群。由于 Amazon MSK 同时支持多种身份验证方法,因此您可以继续为您的客户端同时使用其他身份验证方法,包括 SASL/SCRAM 和 mTLS。
问:MSK Replicator 的复制延迟会有多长?
MSK 复制器异步复制数据。复制延迟取决于许多因素,包括 MSK 集群的 AWS 区域之间的网络距离、源集群和目标集群的吞吐能力以及源集群和目标集群上的分区数量。如果您遇到高延迟,请按照我们的故障排除指南进行操作。
问:我可以使主题名称与 MSK 复制器相同吗?
可以。MSK 复制器允许您在创建新的复制器时,在“前缀”和“相同”之间选择主题名称配置。默认情况下,MSK 复制器会在目标集群中创建新主题,并在主题名称中添加自动生成的前缀。例如,MSK 复制器会将“主题”中的数据从源集群复制到目标集群中名为“<sourceKafkaClusterAlias>.topic”的新主题。您可以使用 DescribeReplicator API 或 MSK 控制台上的 Replicator 详细信息页面,在“sourceKafkaClusterAlias”字段下找到将添加到目标集群中主题名称的前缀。如果您希望在将主题复制到目标集群时保留原始名称,只需将主题名称配置设置为“相同”。
问:为什么要使用“相同”主题名称配置?
您应该使用“相同”主题名称配置来简化跨 AWS 区域构建高可用性、弹性的流数据架构。通过在将 Kafka 主题复制到其他 Amazon MSK 集群时保留原始主题名称,此配置降低了在复制设置或失效转移事件期间重新配置客户端应用程序的需要。这有助于更轻松地建立跨多个区域的主动-被动集群配置,从而提高弹性和可用性。它还简化了跨集群的数据聚合、MSK 集群之间的迁移以及向多个地区分发数据等使用案例。如果您的客户端在 Kafka 记录标头中添加额外的元数据时无法处理数据,则您不应使用此配置。
问:使用“相同”主题名称配置是否存在无限复制循环的风险?
不。MSK 复制器可以自动防止记录被复制回其来源 Kafka 主题,从而避免无限的复制循环。为实现此目的,在复制过程中,MSK 复制器会将元数据添加到记录的标头中。
问:我可以更新现有的复制器以使用“相同”主题名称配置吗?
不能。创建复制器后,将无法更改主题名称配置。
问:如何使用复制来提高流式处理应用程序跨区域的弹性?
您可以使用 MSK Replicator 设置主动-主动或主动-被动集群拓扑,以提高 Kafka 应用程序跨区域的弹性。在主动-主动设置中,两个 MSK 集群都主动提供读取和写入服务。相比之下,在主动-被动设置中,一次只有一个 MSK 集群主动提供流数据,而另一个集群则处于待机状态。我们建议您对主动-被动设置使用“相同”主题名称配置,对主动-主动设置使用“前缀”配置。但是,使用“前缀”配置将需要您重新配置消费者以读取复制的主题。如果您想避免重新配置客户端,您也可以使用“Identical”配置进行主动-主动设置。但是,您将为每个复制器支付额外的数据处理和数据传输费用,因为每个复制器需要处理的数据量是常规数据量的两倍,一次用于复制,另一次用于防止无限循环。
问:哪些 Kafka 版本支持“相同”主题名称配置?
它支持在 Kafka 2.8.1 及以上版本上运行的所有 MSK 集群。
问:我可以复制源集群上的现有数据吗?
可以。默认情况下,当您创建新的复制器时,它会从源集群上的流的顶部(最新偏移量)开始复制数据。或者,如果要复制现有数据,则可以配置新的复制器,以从源集群主题分区的最早偏移量开始复制数据。
复制是否会导致源集群上的使用者被节流?
由于 MSK Replicator 充当源集群的使用者,因此复制可能会导致源集群上的其他使用者被节流。这取决于源集群上的读取容量以及正在复制的数据的吞吐量。我们建议您为源集群和目标集群配置相同的容量,并在计算所需容量时考虑复制吞吐量。您还可以在源集群和目标集群上为 Replicator 设置 Kafka 配额,以控制 Replicator 可以使用的容量。
问:我可以在写入目标集群之前压缩数据吗?
可以,在创建 Replicator 时,您可以在 None、GZIP、Snappy、LZ4 和 ZSTD 中指定自己选择的压缩编解码器。
开始使用 Amazon MSK
访问 Amazon MSK 定价页面。
请参阅本分步指南,了解如何在 Amazon MSK 上设置 Apache Kafka 集群。
开始在 Amazon MSK 上运行 Apache Kafka 集群。登录 Amazon MSK 控制台。