Amazon Managed Streaming for Apache Kafka 常见问题

一般性问题

Amazon MSK 是一项 AWS 流式传输数据服务,可以管理 Apache Kafka 基础设施和运营,让开发人员和 DevOps 经理可以轻松地在 AWS 上运行 Apache Kafka 应用程序和 Kafka Connect 连接器,而无需成为运行 Apache Kafka 集群的专家。Amazon MSK 运营、维护和扩展 Apache Kafka 集群,提供开箱即用的企业级安全功能,并具有内置的 AWS 集成,可加速流数据应用程序的开发。

要开始使用,您可以将现有的 Apache Kafka 工作负载和 Kafka Connect 连接器迁移到 Amazon MSK 中,或者只需执行几个步骤即可从头开始构建几个新的工作负载和连接器。您无需为用于进行复制的集群内流量支付任何数据传输费用,也不需要进行任何承诺或支付预付款。您只需为使用的资源付费。

Apache Kafka 是一个开源、高性能、可容错且可扩展的平台,用于构建实时流式传输数据管道和应用程序。Apache Kafka 是一个流数据存储,它将生成流数据的应用程序(生产者)与从其数据存储中使用流数据的应用程序(使用者)分离到其数据存储中。各个组织将 Apache Kafka 用作持续分析和响应流式传输数据的应用程序的数据来源。

流式传输数据是由数千台机器、设备、网站和应用程序生成的连续的较小记录或事件流(一个记录或事件通常为几千字节)。流式传输数据包括多种数据,例如客户使用您的移动或 Web 应用程序生成的日志文件、网购数据、游戏内玩家活动、社交网站信息、金融交易大厅、地理空间服务,安全日志、指标,以及来自数据中心内所连接设备或仪器的遥测数据。流式传输数据服务(例如 Amazon MSK 和 Amazon Kinesis Data Streams)使您可以轻松地持续收集、处理和提供流数据。

Kafka Connect 是 Apache Kafka 的开源组件,是连接 Apache Kafka 与数据库、键值存储、搜索索引和文件系统等外部系统的框架。

Apache Kafka 的三项关键功能如下所示:

  • Apache Kafka 以容错的方式存储流数据,在生产者和消费者之间提供缓冲区。它将事件存储为一系列连续的记录,并保留记录的生成顺序。
  • Apache Kafka 允许很多数据生产者(例如网站、物联网设备和 Amazon Elastic Compute Cloud(Amazon EC2)实例)持续发布流式传输数据,并使用 Apache Kafka 主题对这些数据进行分类。多个数据使用者(例如机器学习应用程序、AWS Lambda 函数和微服务)以自己的速率从这些主题中读取,类似于消息队列或企业消息收发系统。
  • 数据使用者可以按先进先出的顺序处理来自 Apache Kafka 主题的数据,从而保留数据的生成顺序。

Apache Kafka 将记录存储在主题中。数据生成者将记录写入主题,而使用者从主题中读取记录。Apache Kafka 中的每个记录都包含一个密钥、一个值和一个时间戳,有时还包含标头元数据。Apache Kafka 在称为“代理”的多个节点上对主题进行分区和复制这些分区。Apache Kafka 在一个或多个代理上作为一个集群运行,这些代理可以位于多个 AWS 可用区中,以创建极具可用性的集群。Apache Kafka 依赖 Apache ZooKeeperApache Kafka Raft(KRaft)维护集群元数据。

Apache Kafka 支持转换、传输和响应流数据的实时应用程序,还可用于构建可在多个系统或应用程序之间可靠地发送数据的实时流数据管道。

支持,Apache Kafka 客户端可以使用 AWS Glue 的一项无服务器功能 AWS Glue Schema Registry,无需额外付费。请访问《AWS Glue Schema Registry 开发人员指南》,以开始使用并了解更多信息。

Amazon MSK 能够让您轻松在 AWS 上开始使用和运行 Apache Kafka,并获得高可用性和安全性。Amazon MSK 还提供了与 AWS 服务的集成,而不会由于运行 Apache Kafka 集群而产生运营开销。通过 Amazon MSK,您可以使用 Apache Kafka 的开源版本,这项服务可以管理 Apache Kafka 集群的设置、预置、AWS 集成和持续维护。

只需在控制台中执行几个步骤,即可创建 Amazon MSK 集群。在 Amazon MSK 集群中,Amazon MSK 将取代运行状况不佳的代理、自动复制数据以提供高可用性、管理元数据节点、根据需要自动部署硬件补丁、管理与 AWS 服务的集成、通过控制台显示重要指标以及支持 Apache Kafka 版本升级,以使您能够利用对 Apache Kafka 的开源版本进行的改进。

资源

您可以按照《Amazon MSK 入门指南》设置集群并从集群中生成和使用数据。总之,只需在 AWS 管理控制台中执行几个步骤或者使用 AWS SDK,即可创建您的第一个集群。首先,在 Amazon MSK 控制台中,选择要在其中创建 MSK 集群的 AWS 区域。为您的集群选择一个名称、要用以运行集群的虚拟私有云(VPC)以及每个可用区的子网。如果正在创建预置集群,您还可以选择一种代理实例类型和每个可用区的代理数量。

预置的集群包含代理实例和抽象化的元数据节点。无服务器集群本身就是一种资源,它们抽象化了所有基础资源。

在 Apache Kafka 中,代理是指构成 Apache Kafka 集群的各个服务器。它们负责存储和复制发布到 Kafka 主题的数据、管理这些主题内的分区、处理客户端请求(生成和使用消息),并相互协调以维护 Kafka 部署的整体状态。代理是支持 Kafka 的分布式、可扩展和容错架构的核心组件。

对于预置的集群,您可以选择 EC2 T3.small 示例或者 EC2 M7g 和 M5 实例系列内的实例。对于无服务器集群,代理是完全抽象的。 MSK 还提供了标准代理和快速代理类型。

不需要,您预置的每个代理都包括由 Amazon MSK 服务托管的启动卷存储。

有些资源,例如弹性网络接口(ENI),将显示在您的 Amazon EC2 账户中。其他 Amazon MSK 资源不会显示在您的 Amazon EC2 账户中,因为它们由 Amazon MSK 服务管理。

对于预置的集群,您需要为您创建的每个集群预置代理实例。在标准代理上,您需要预置存储,并可以选择为存储卷启用预置的存储吞吐量,这些存储卷可以用来扩展 I/O,而无需预置其他代理。使用快速代理,您无需预置或管理存储。对于所有集群类型,您无需预置 Apache ZooKeeper 或 KRaft 节点等元数据节点,因为您创建的每个集群都包含这些资源,无需额外付费。对于无服务器集群,您只需创建一个作为资源的集群。

Amazon MSK 使用 Apache Kafka 的主从复制在代理之间复制数据。借助 Amazon MSK,您可以使用多可用区复制功能轻松部署集群。使用标准代理,您可以选择按主题使用自定义复制策略。快速代理始终在三个可用区中复制您的数据,以确保更高的可用性。将使用指定的代理类型和复制策略,部署和隔离主代理和从代理。例如,如果您选择一些使用三种可用区代理复制策略的标准代理,其中每个可用区集群具有一个代理,Amazon MSK 将创建一个包含三个代理的集群(一个区域中的三个可用区各有一个代理),而且默认情况下也将有三个主题复制系数(除非您选择覆盖主题复制系数)。要详细了解客户端失效转移期间发生的情况,请参阅我们的客户端失效转移文档

能,Amazon MSK 允许您创建自定义配置并将其应用于新集群和现有集群。快速代理可以保护更多配置免受次优值的影响,这些值可能会影响可用性和持久性。由于 Amazon MSK 全面管理存储层,快速代理还会将与存储相关的配置抽象化,以简化体验。有关自定义配置的更多信息,请参阅配置文档

创建 Apache Kafka 集群后,您可以使用 Apache Kafka API 创建主题。使用 Apache Kafka API 执行所有主题和分区级别操作和配置。下面的命令是使用 Apache Kafka API 创建主题的示例以及可用于您的集群的配置详细信息:


<path-to-your-kafka-installation>/bin/kafka-topics.sh --create — bootstrap-server <BootstrapBrokerString> --replication-factor 3 --partitions 1 -- topic TopicName

Amazon MSK 为 Apache Kafka 集群提供了两种部署选项:Amazon MSK 预置和 Amazon MSK 无服务器。使用 MSK 预置,您可以对集群进行不同级别的控制,同时消除了由于管理 Apache Kafka 集群而产生的大部分运营开销。使用 MSK 预置,您可以以代理数量为单位扩展您的集群。您可以从各种代理类型中进行选择,包括标准代理和快速代理。相比之下,MSK 无服务器是一种将集群扩展和管理完全抽象化的集群类型。使用 MSK 无服务器,您可以轻松运行您的应用程序,而无需预置、配置或优化集群,并且您只需按您流式传输和保留的数据量付费。Amazon MSK 还提供多种选项,以简化与 MSK 集群的连接。这些选项包括 Amazon MSK Connect、Amazon MSK 复制器和其他原生 AWS 集成。请参阅后续章节,以了解更多详细信息。 

Amazon MSK 预置

MSK 预置是一个 MSK 集群部署选项,允许您手动配置和扩展 Apache Kafka 集群。这样,您就可以对支持 Apache Kafka 环境的基础设施进行不同级别的控制。

使用 MSK 预置,您可以选择实例类型、标准代理类型的存储卷以及构成 Kafka 集群的代理节点数量。您还可以随着数据处理需求的变化,添加或移除代理以扩展集群。借助这一灵活性,您可以根据特定的工作负载要求优化集群,无论是实现最大的吞吐量、保留容量还是其他的性能特征。

除了基础设施配置选项以外,MSK 预置还提供了企业级安全性、监控和运营优势。这些功能包括 Apache Kafka 版本升级、通过加密和访问控制实现的内置安全性以及与 Amazon CloudWatch 等其他 AWS 服务集成以进行监控。MSK 预置提供两种主要的代理类型:标准和快速。

标准代理为您配置集群提供了最大的灵活性,而快速代理为运行高性能流式传输应用程序提供了更高的弹性、吞吐量、弹性和易用性。有关每种产品的更多详细信息,请参阅以下小节。下表还重点介绍了标准代理与快速代理之间的主要功能比较。

 

功能 标准 快速
存储管理 由客户管理的功能(功能包括 EBS 存储、分层存储、预置的存储吞吐量、自动扩展、存储容量警报) 完全由 MSK 管理的功能
支持的实例 T3、M5、M7g M7g
大小调整和扩展考虑因素 吞吐量、连接、分区、存储 吞吐量、连接、分区
代理扩展 垂直扩缩和水平扩缩 垂直扩缩和水平扩缩
Kafka 版本 参见文档 从 3.6 版开始
Apache Kafka 配置 更多可配置的功能 主要是 MSK 管理的功能,用来提高弹性
安全性 加密、私有访问/公开访问、身份验证和授权 – IAM、SASL/SCRAM、mTLS、纯文本、Kafka ACL 加密、私有访问/公开访问、身份验证和授权 – IAM、SASL/SCRAM、mTLS、纯文本、Kafka ACL
监控 CloudWatch、开放监控 CloudWatch、开放监控
     
     

是的,Amazon MSK 支持基于 AWS Graviton 3 的 M7g 实例,从 .large 到 .16xlarge 大小不等,以运行所有 Apache Kafka 工作负载。Graviton 实例具有与 Amazon MSK 相同的可用性和持久性优势,与相应的 M5 实例相比,成本可降低多达 24%。与 Amazon MSK M5 实例相比,Graviton 实例的每个实例的吞吐量可提高多达 29%,使客户能够使用更少的代理或更小的实例运行 MSK 集群。

标准代理

适用于 MSK 预置的标准代理为配置集群的性能提供了最高的灵活性。您可以从多种集群配置中进行选择,以实现应用程序所需的可用性、持久性、吞吐量和延迟特性。您还可以预置存储容量并在需要时增大容量。Amazon MSK 负责标准代理和附加存储资源的硬件维护,并自动修复可能出现的硬件问题。

快速代理

适用于 MSK 预置的快速代理使 Apache Kafka 更易于管理、能够更经济高效地大规模运行、更具弹性并具有您期望的低延迟。代理包括即用即付的存储,可自动扩展,而且无需调整大小、预置或主动监控。根据所选的实例大小,与标准 Apache Kafka 代理相比,每个代理节点可以将每个代理的吞吐量提高到最多 3 倍、将纵向扩展速度提高到最多 20 倍、将恢复速度加快 90%。快速代理预先配有 Amazon MSK 的默认最佳实践,并实施客户端吞吐量配额,以便最大限度地减少客户端与 Kafka 后台操作之间的资源争用。

  • 无需管理存储:快速代理无需预置或管理任何存储资源。您可以获得弹性、几乎无限、即用即付的完全托管式存储。对于高吞吐量应用场景,您无需对计算实例与存储卷之间的交互以及相关的吞吐量瓶颈进行推理。这些功能简化了集群管理,并消除了存储管理运营开销。
  • 更快的扩展:与标准代理相比,快速代理允许您更快地扩展集群和移动分区。当您需要横向扩展集群以应对即将到来的负载高峰或横向缩减集群以降低成本时,此功能至关重要。有关如何扩展集群的更多详细信息,请参阅有关如何扩展集群、移除代理、重新分配分区以及设置 LinkedIn 的 Cruise Control 以进行重新平衡的章节。
  • 更高的吞吐量:快速代理为每个代理提供的吞吐量最多可达标准代理的 3 倍。例如,使用每个 m7g.16xlarge 大小的快速代理可以安全地以高达 500 MBps 的速度写入数据,而等效的标准代理上的数据写入速度仅为 153.8 MBps(这两个数字都假设为复制和重新平衡等后台操作分配了足够的带宽)。
  • 经过配置以提供高弹性:快速代理会自动提供预先配置的各种最佳实践,以提高集群的弹性。其中包括为关键 Apache Kafka 配置设置的护栏、吞吐量配额以及为后台操作和计划外维修提供的容量预留。使用这些功能,可以更安全、更轻松地运行大型 Apache Kafka 应用程序。有关更多详细信息,请参阅有关快速代理配置和 Amazon MSK 快速代理配额的章节。
  • 没有维护时段:快速代理没有任何维护时段。Amazon MSK 会自动持续更新您的集群硬件。有关更多详细信息,请参阅 Amazon MSK 快速代理。

每个快速代理都具有更高的吞吐量,因此您可以为同一个工作负载创建具有更少代理的集群。此外,当集群启动并运行之后,您可以监控集群资源的使用情况,并比使用标准代理更快地调整容量大小。这样,您就可以预置适合所需容量的资源,并更快地扩展以满足需求的任何变化。

具有快速代理的集群所涉及的 Apache Kafka API 和工具使用标准的 Apache Kafka 客户端。

快速代理预先配有 Amazon MSK 默认最佳实践,它们可以优化可用性和持久性。您可以自定义其中一些配置,以进一步微调集群的性能。请在《Amazon MSK 开发人员指南》中阅读有关快速代理配置的更多信息。

与标准代理一样,Amazon MSK 与 AWS Key Management Service(AWS KMS)集成,以便为快速代理中的存储提供透明的服务器端加密。当您使用快速代理创建 MSK 集群时,可以指定您希望 Amazon MSK 用来对您的静态数据进行加密的 AWS KMS 密钥。如果您不指定 KMS 密钥,Amazon MSK 将为您创建一个 AWS 托管式密钥并代表您使用此密钥。就像对标准代理那样,Amazon MSK 还使用 TLS 对快速代理的传输中数据进行加密。

大多数适用于标准代理的 MSK 预置特性和功能也适用于使用快速代理的集群。一些区别包括:存储管理、实例类型可用性和支持的版本。请参见 MSK 预置中的标准代理和快速代理的对比表,其中重点介绍了一些关键的异同。

是的,您可以使用 MirrorMaker 2 或 Amazon MSK 复制器将 Kafka 集群中的数据迁移到由快速代理组成的集群,Amazon MSK 复制器可以将集群的数据和元数据复制到新集群。您可以在《Amazon MSK 开发人员指南》中详细了解如何使用 MirrorMaker 2MSK 复制器

快速代理可以提供更高的性价比和弹性以及更低的运营开销,因此成为了 MSK 预置上的所有 Apache Kafka 工作负载的理想选择。但如果您希望控制代理的更多配置和设置,可以选择标准代理类型。使用标准代理,您可以自定义更广泛的 Kafka 配置,包括复制系数、日志文件大小和领导选举策略,这样,您就对集群设置拥有了更高的灵活性。

Amazon MSK 无服务器

MSK 无服务器是 Amazon MSK 的一种集群类型,它可以帮助您轻松运行 Apache Kafka 集群,无需管理计算和存储容量。使用 MSK 无服务器,您可以轻松运行您的应用程序,而无需预置、配置或优化集群,并且您只需按您流式传输和保留的数据量付费。 

是的,MSK 无服务器可以全面管理分区,包括监控和移动分区,甚至跨集群加载分区。

MSK 无服务器针对每个集群提供高达 200 MBps 的写入容量和 400 MBps 的读取容量。此外,为确保集群中所有分区都有足够的吞吐量可用,MSK 无服务器为每个分区分配了高达 5 MBps 的即时写入容量和 10 MBps 的即时读取容量。 

MSK 无服务器使用通过 AWS KMS 颁发的服务托管式密钥,对传输中的所有流量和所有静态数据进行加密。客户端通过使用 AWS PrivateLink 的私有连接连接到 MSK 无服务器,不会将您的流量暴露给公有网络。此外,MSK 无服务器还提供了 AWS Identity and Access Management(IAM)访问控制,您可以使用它管理对 Apache Kafka 资源(例如主题)进行的客户端身份验证和客户端授权。

当创建一个 MSK 无服务器集群时,您需要提供一个或多个托管此集群的客户端的 Amazon Virtual Private Cloud(VPC)的子网。在上述任何 Amazon VPC 中托管的客户端可以使用它的引导代理字符串连接到 MSK 无服务器集群。

要了解最新的区域可用性,请参阅 Amazon MSK 定价页面

MSK 无服务器目前支持使用 IAM(Identity Access Management)进行客户端身份验证和授权。您的客户端可以承担 IAM 角色进行身份验证,并且您可以使用关联的 IAM 策略实施访问控制。

您可以使用任何与 Apache Kafka 兼容的工具来处理 MSK 无服务器集群主题中的数据。MSK 无服务器与适用于 Apache Flink 的亚马逊托管服务集成,用于有状态的流处理;并与 AWS Lambda 集成,用于事件处理。您还可以使用 Apache Kafka Connect 接收器连接器将数据发送到任何所需的目的地。 

创建分区时,MSK 无服务器会为分区创建两个副本,并将它们放在不同的可用区中。此外,MSK 无服务器会自动检测和恢复失败的后端资源,以保持高可用性。

迁移到 Amazon MSK

可以,您可以使用第三方工具或 Apache Kafka 支持的开源工具(例如 MirrorMaker2)将集群中的数据复制到 MSK 集群。请咨询此 Amazon MSK 迁移实验室,以帮助您规划迁移。

支持的版本

是的,Amazon MSK 针对预置的集群支持完全托管式就地 Apache Kafka 版本升级。要了解有关升级 Apache Kafka 版本和高可用性最佳实践的更多信息,请参阅版本升级文档

支持所有 Apache Kafka 版本,直到它们的支持日期结束。有关支持政策和日期结束的更多详细信息,请参阅我们的版本支持文档

联网

是的,Amazon MSK 始终在由 Amazon MSK 服务托管的 Amazon VPC 中运行。Amazon MSK 资源将可用于您在设置集群时选择的自己的 Amazon VPC、子网和安全组。VPC 中的 IP 地址会通过 ENI 挂载到您的 Amazon MSK 资源,并且在默认情况下,所有网络流量均保持在 AWS 网络内,且无法通过互联网访问。

VPC 中的客户端可通过您账户中显示的 ENI 访问集群中的代理。ENI 上的安全组将决定您的代理上允许的传入和传出流量的来源和类型。

可以,Amazon MSK 提供一种选项,可用于通过互联网安全地连接到运行 Apache Kafka 2.6.0 或更高版本的 Amazon MSK 集群的代理。通过启用公开访问,私有 Amazon VPC 外部的经过授权的客户端可以将加密数据传入和传出特定的 Amazon MSK 集群。您可以在集群创建后免费为 MSK 集群启用公开访问,集群入口和出口将按标准 AWS 数据传输成本计费。要了解有关如何开启公开访问的更多信息,请参阅公开访问文档

默认情况下,要从 Amazon MSK 集群生成和使用数据,只能通过 VPC 中的客户端与 Amazon MSK 集群之间的私有连接进行。但如果您为 MSK 集群开启公开访问并使用公有引导代理字符串连接到 MSK 集群,此连接即使经过了身份验证、授权和加密,也不再被视为私有。我们建议您将集群的安全组配置为具有入站 TCP 规则,允许从您信任的 IP 地址进行公开访问,并在开启公开访问时尽可能限制这些规则。

您可以为运行 Apache Kafka 2.7.1 或更高版本的 MSK 集群开启多 VPC 私有连接,以便从与 MSK 集群的 Amazon VPC 不同的任何 VPC 或 AWS 账户连接到您的 MSK 集群。您只能在为任何支持的身份验证方案(IAM 身份验证、SASL SCRAM 和 mTLS 身份验证)创建集群后开启私有连接。您应将您的客户端配置为使用 Amazon MSK 管理的 VPC 连接私密连接到集群,这些 VPC 连接使用 PrivateLink 技术支持私有连接。要了解有关如何设置私有连接的更多信息,请参阅从 AWS 文档内访问

加密

可以,Amazon MSK 使用 Amazon Elastic Block Store(Amazon EBS)服务器端加密AWS KMS 密钥对存储卷进行加密。

是的,默认情况下,通过 TLS 为新集群启用了传输中加密,以进行代理间通信。对于预置的集群,您可以选择在创建集群时不使用传输中加密。

是的,默认情况下,只对从 AWS CLI 或 AWS 管理控制台创建的集群将传输中加密设置为 TLS。客户端需要其他配置才能使用 TLS 加密与集群通信。对于预置的集群,您可以通过选择 TLS/纯文本或纯文本设置来更改加密原定设置。请阅读有关 Amazon MSK 加密的更多信息。

是的,MSK 集群支持在 Kafka 代理与元数据节点之间进行 TLS 传输中加密。

访问管理

对于无服务器集群,您可以使用 IAM 访问控制进行身份验证和授权。对于预置的集群,您可以使用以下选项:

  • 对 AuthN/AuthZ 都使用 IAM 访问控制(推荐)
  • 对 AuthN 使用 TLS 证书身份验证,对 AuthZ 使用访问控制列表
  • 对 AuthN 使用 SASL/SCRAM,对 AuthZ 使用访问控制列表

Amazon MSK 推荐使用 IAM 访问控制。它最容易使用,而且它原定设置为最低权限访问,是最安全的选项。

如果您使用 IAM 访问控制,Amazon MSK 会使用您编写的策略及其自己的授权方对操作进行授权。若您使用 TLS 证书身份验证或 SASL/SCRAM,Apache Kafka 则会使用访问控制列表 (ACL) 进行授权。要启用 ACL,您必须启用使用 TLS 证书或 SASL/SCRAM 的客户端身份验证。

如果您使用 IAM 访问控制,Amazon MSK 将为您进行身份验证和授权,而不需要任何额外设置。如果使用的是 TLS 身份验证,您可以使用客户端 TLS 证书的 Dname 作为 ACL 的委托人对客户端请求进行授权。如果使用的是 SASL/SCRAM,您可以使用用户名作为 ACL 的委托人对客户端请求进行授权。

您可以使用 IAM 控制服务 API 操作。

可以,您可以从 AWS 管理控制台或使用 UpdateSecurity API 为现有的集群启用 IAM 访问控制。

不可以,IAM 访问控制只适用于 MSK 集群。

您可以将集群策略附加到 Amazon MSK 集群,为您的跨账户 Kafka 客户端提供设置与 Amazon MSK 集群的私有连接的权限。使用 IAM 客户端身份验证时,您还可以使用集群策略来精细定义连接客户端的 Kafka 数据面板权限。要了解有关集群策略的更多信息,请参阅集群策略文档

监控、指标、日志记录和标记

您可以通过 Amazon MSK 控制台、Amazon CloudWatch 控制台或 JMX 监控集群的性能,并使用带有 Prometheus(一种开源监控解决方案)的开放监控功能来监控主机指标。

使用 CloudWatch 监控您的集群的成本取决于监控级别和您的 Apache Kafka 集群大小。CloudWatch 按每月每个指标收费,包括 AWS Free Tier。请参阅 Amazon CloudWatch 定价,以了解更多信息。有关每个监控级别公开的指标数量的详细信息,请参阅 Amazon MSK 监控文档

设计用于从 Prometheus 导出器读取数据的工具可以与一些开放监控功能兼容,例如 DatadogLensesNew RelicSumo Logic 或 Prometheus 服务器。有关开放监控功能的详细信息,请参阅 Amazon MSK 开放监控功能文档

您可以使用您正在使用的 Apache Kafka 版本支持的任何客户端监控。 

可以,您可以从 AWS CLI 或 AWS 管理控制台标记 Amazon MSK 集群。

主题级使用者延迟指标作为 Amazon MSK 对所有集群发布到 CloudWatch 的默认一组指标的一部分提供。获取这些指标无需进行额外的设置。

主题级指标包含在默认的一组 Amazon MSK 指标中,这些指标是免费的。分区级指标按照 Amazon CloudWatch 定价进行收费。

您可以对预置的集群启用代理日志传送。您可以将代理日志传送到 Amazon CloudWatch Logs、Amazon Simple Storage Service(Amazon S3)和 Amazon Data Firehose。Firehose 支持多种传送目的地,包括 Amazon OpenSearch Service。要了解如何启用此功能,请参阅 Amazon MSK 日志记录文档。要了解有关定价的信息,请参阅 Amazon CloudWatch LogsAmazon Data Firehose 定价页面。

Amazon MSK 为一个预置集群内的所有代理提供 INFO(信息)级日志。

可以,如果您使用 IAM 访问控制,Apache Kafka 资源 API 的使用日志会被记录到 AWS CloudTrail。

元数据管理

根据 https://zookeeper.apache.org:“Apache ZooKeeper 是一项集中式服务,使您能够维护配置信息、提供组服务以及命名和提供分布式同步。分布式应用程序会以某种形式使用所有这些类型的服务”,包括 Apache Kafka。

是的,Amazon MSK 使用 Apache ZooKeeper 进行元数据管理。此外,从 Apache Kafka 3.7 版开始,您可以在 ZooKeeper 模式或 KRaft 模式下创建集群。使用 KRaft 模式创建的集群使用 KRaft 控制器而不是 ZooKeeper 节点进行元数据管理。

Apache KRaft 是一种共识协议,它将 Kafka 集群中的元数据管理从外部 Apache ZooKeeper 节点转移到 Kafka 内的一组控制器。此更改允许将元数据作为 Kafka 代理中的主题进行存储和复制,从而加快元数据的传播速度。 要了解更多信息,请参阅我们的 Apache KRaft 文档

无需更改 API 即可在 Amazon MSK 上使用 KRaft 模式。但是,如果您的客户端今天仍然使用 --zookeeper 连接字符串,您应该更新客户端以使用 --bootstrap-server 连接字符串来连接到集群并执行管理操作。--zookeeper 标志在 Apache Kafka 版本 2.5 中已弃用,并从 Kafka 3.0 开始删除。因此,我们建议您使用最新的 Apache Kafka 客户端版本和 --bootstrap-server 连接字符串。

您应确保您使用的任何工具都能在没有 ZooKeeper 连接的情况下使用 Kafka 管理员 API。请参阅我们有关如何对 KRaft 模式集群使用 Cruise Control 的最新文档。Cruise Control 还发布了在没有 ZooKeeper 连接的情况下运行 Kafka 需要遵循的步骤。

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

集成

Amazon MSK 与以下 AWS 服务集成:

Amazon MSK 无服务器与以下 AWS 服务集成:

复制

Amazon MSK 复制器是 Amazon MSK 的一项功能,可以帮助客户在不同的 AWS 区域(跨区域复制)或同一个 AWS 区域(同区域复制)中的 MSK 集群之间可靠地复制数据,而无需编写代码或管理基础设施。您可以使用跨区域复制功能构建高可用性和容错性的多区域流式传输应用程序,从而提高弹性。您还可以通过跨区域复制功能为不同地理区域中的使用者提供延迟更低的访问。您可以使用同区域复制功能将数据从一个集群分发到多个集群,以便与您的合作伙伴和团队共享数据。您还可以使用同区域复制功能将来自多个集群的数据聚合到一个集群中,以进行分析。

要在一对源 MSK 集群和目标 MSK 集群之间设置复制,您需要在目的地区域创建一个复制器。要创建复制器,您需要指定详细信息,其中包括源 MSK 集群和目标 MSK 集群的 Amazon 资源名称(ARN)以及可供 MSK 复制器用来访问集群的 IAM 角色。如果目标 MSK 集群尚不存在,则需要创建一个。

MSK Replicator 仅支持在 MSK 集群之间进行复制。支持预置和无服务器类型的 MSK 集群。您还可以使用 MSK 复制器从预置类型切换到无服务器类型,或者使用其他不受支持的 Kafka 集群进行反方向切换。

是的,您可以在创建 Replicator 时使用允许和拒绝列表来指定要复制的主题。 

是的,MSK 复制器会自动复制必要的 Kafka 元数据,例如主题配置、ACL 和使用者组偏移,以使使用这些元数据的应用程序能够在失效转移之后无缝继续处理。如果您只想复制数据,则可以选择关闭其中一项或多项设置。您还可以在创建 Replicator 时使用允许或拒绝列表来指定要复制哪些使用者组。

不需要,MSK 复制器会自动部署、预置和扩展底层复制基础设施,以支持入口吞吐量的变化。

不能,MSK Replicator 仅支持在同一 AWS 账户的不同 MSK 集群之间进行复制。

您可以在目标区域中使用 CloudWatch 查看每个 Replicator 的主题和聚合级别的 ReplicationLatency、
MessageLag 和 ReplicatorThroughput 指标,无需额外付费。这些指标将显示在 AWS/Kafka 命名空间中的 ReplicatorName 下方。您还可以查看 ReplicatorFailure、AuthError 和 ThrottleTime 指标,以了解您的复制器是否遇到了任何问题。

您可以使用 MSK 复制器设置主动-主动或主动-被动集群拓扑,以提高 Kafka 应用程序跨区域的弹性。在主动-主动设置中,两个 MSK 集群都主动提供读取和写入服务。相比之下,在主动-被动设置中,一次只有一个 MSK 集群主动提供流式传输数据,而另一个集群则处于待机状态。

符合。通过为每个源集群和目标集群对创建一个不同的复制器,您可以将数据从一个集群复制到多个集群,或者将数据从多个集群复制到一个集群。

MSK 复制器使用 IAM 访问控制连接到您的源集群和目标集群。您需要为创建复制器的 IAM 访问控制开启源 MSK 集群和目标 MSK 集群。由于 Amazon MSK 同时支持多种身份验证方法,因此您可以继续为您的客户端同时使用其他身份验证方法,包括 SASL/SCRAM 和 mTLS。

MSK 复制器异步复制数据。复制延迟取决于许多因素,包括 MSK 集群的区域之间的网络距离、源集群和目标集群的吞吐能力以及源集群和目标集群上的分区数量。

不可以,MSK Replicator 会在目标集群中创建新主题,并在主题名称中添加自动生成的前缀。例如,MSK 复制器会将主题中的数据从源集群复制到目标集群中名为 <sourceKafkaClusterAlias>.topic 的新主题。MSK 复制器这样做是为了将包含从源集群复制的数据的主题与目标集群中的其他主题区分开来,并避免数据在集群之间循环复制。您可以使用 DescribeReplicator API 或者使用 Amazon MSK 控制台上的“复制器”详细信息页面,在 sourceKafkaClusterAlias 字段下方找到要添加到目标集群中的主题名称的前缀。

符合。默认情况下,当您创建新的复制器时,它会从源集群上的流的顶部(最新偏移量)开始复制数据。或者,如果要复制现有数据,则可以配置新的复制器,以从源集群主题分区的最早偏移量开始复制数据。

由于 MSK Replicator 充当源集群的使用者,因此复制可能会导致源集群上的其他使用者被节流。这取决于源集群上的读取容量以及正在复制的数据的吞吐量。我们建议您为源集群和目标集群配置相同的容量,并在计算所需容量时考虑复制吞吐量。您还可以在源集群和目标集群上为 Replicator 设置 Kafka 配额,以控制 Replicator 可以使用的容量。

可以,在创建复制器时,您可以在 None、GZIP、Snappy、LZ4 和 ZSTD 中指定自己选择的压缩编解码器。

可以,在创建复制器时,您可以在 None、GZIP、Snappy、LZ4 和 ZSTD 中指定自己选择的压缩编解码器。

扩展

您可以使用 AWS 管理控制台或 AWS CLI 纵向扩展正在标准代理上运行的预置集群中的存储。您还可以使用 AWS 管理控制台或者通过使用 AWS CLI 或 API 创建 AWS Application Auto Scaling 策略,以创建自动扩缩存储策略。使用标准代理上的分层存储,您可以在集群上存储几乎无限的数据,而无需添加用于存储的代理。使用快速代理,您无需预置或管理存储,还可以访问几乎无限的存储。在无服务器集群中,存储可以根据您的使用情况无缝扩展。

Apache Kafka 将数据存储在被称为日志段的文件中。每个段完成后,根据在集群或主题级别配置的大小,将其复制到低成本存储层。数据在性能优化型存储中保存指定的保留时间或大小,然后被删除。低成本存储具有单独的时间和大小限制设置,这一时间比主存储层更长。如果客户端从存储在低成本层中的段中请求数据,代理将从其中读取数据并提供数据,提供方式与从主存储中提供时相同。

可以,您可以选择增减预置的 MSK 集群中的代理数量。

可以,您可以选择扩缩预置的 MSK 集群上的代理类型。

您可以使用 Cruise Control 对分区进行自动重新均衡,以便管理 I/O 热量。请参阅 Cruise Control 文档,以了解更多信息。此外,您也可以使用 Kafka Admin API kafka-reassign-partitions.sh 来重新分配代理间的分区。在无服务器集群中,Amazon MSK 自动均衡分区。

定价和可用性

根据您创建的资源定价。您可以访问 Amazon MSK 定价,以了解更多信息。

不需要,集群中的数据传输包含在服务中,无需额外付费。

有关可以使用 Amazon MSK 的区域的信息,请访问 AWS 区域表。 

使用预置的集群时,您需要为传入和传出 MSK 集群的数据支付标准的 AWS 数据传输费用。您不需要为一个区域中的集群内的数据传输支付任何费用,包括代理之间的数据传输以及代理与元数据管理节点之间的数据传输。

使用无服务器集群时,您需要为传入和传出另一个区域的数据以及传到公有网络的数据支付标准的 AWS 数据传输费用。

否,目前不提供。

合规性

Amazon MSK 符合以下计划:

  • 符合 HIPAA 要求
  • PCI
  • ISO
  • SOC 1、2 和 3

有关 AWS 服务和合规性计划的完整列表,请参阅按合规性计划提供的范围内 AWS 服务

服务水平协议

我们的 Amazon MSK SLA 保证 Amazon MSK(包括 MSK Serverless 和 MSK Connect)的月度正常运行时间百分比至少达到 99.9%。 

如果 Amazon MSK 上的多可用区部署在任何每月计费周期中的月度正常运行时间百分比低于 99.9%,根据 Amazon MSK SLA,您将有资格获得 Amazon MSK 的 SLA 抵扣。

有关 SLA 的所有条款和条件的完整详细信息以及有关如何提交索赔的详细信息,请参阅 Amazon MSK SLA 页面