- 分析›
- Amazon MSK›
- 常见问题
Amazon Managed Streaming for Apache Kafka 常见问题
一般性问题
什么是 Amazon Managed Streaming for Apache Kafka(Amazon MSK)?
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 是一个流数据存储,它将生成流数据的应用程序(生产者)与从其数据存储中使用流数据的应用程序(使用者)分离到其数据存储中。各个组织将 Apache Kafka 用作持续分析和响应流式传输数据的应用程序的数据来源。
什么是流数据?
流式传输数据是由数千台机器、设备、网站和应用程序生成的连续的较小记录或事件流(一个记录或事件通常为几千字节)。流式传输数据包括多种数据,例如客户使用您的移动或 Web 应用程序生成的日志文件、网购数据、游戏内玩家活动、社交网站信息、金融交易大厅、地理空间服务,安全日志、指标,以及来自数据中心内所连接设备或仪器的遥测数据。流式传输数据服务(例如 Amazon MSK 和 Amazon Kinesis Data Streams)使您可以轻松地持续收集、处理和提供流数据。
什么是 Kafka Connect?
Kafka Connect 是 Apache Kafka 的开源组件,是连接 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 在称为“代理”的多个节点上对主题进行分区和复制这些分区。Apache Kafka 在一个或多个代理上作为一个集群运行,这些代理可以位于多个 AWS 可用区中,以创建极具可用性的集群。Apache Kafka 依赖 Apache ZooKeeper 或 Apache Kafka Raft(KRaft)维护集群元数据。
何时应使用 Apache Kafka?
Apache Kafka 支持转换、传输和响应流数据的实时应用程序,还可用于构建可在多个系统或应用程序之间可靠地发送数据的实时流数据管道。
Amazon MSK 是否支持 Schema 注册?
支持,Apache Kafka 客户端可以使用 AWS Glue 的一项无服务器功能 AWS Glue Schema Registry,无需额外付费。请访问《AWS Glue Schema Registry 开发人员指南》,以开始使用并了解更多信息。 |
Amazon MSK 的作用是什么?
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 的开源版本进行的改进。
资源
如何创建第一个 MSK 集群?
您可以按照《Amazon MSK 入门指南》设置集群并从集群中生成和使用数据。总之,只需在 AWS 管理控制台中执行几个步骤或者使用 AWS SDK,即可创建您的第一个集群。首先,在 Amazon MSK 控制台中,选择要在其中创建 MSK 集群的 AWS 区域。为您的集群选择一个名称、要用以运行集群的虚拟私有云(VPC)以及每个可用区的子网。如果正在创建预置集群,您还可以选择一种代理实例类型和每个可用区的代理数量。
集群中有哪些资源?
预置的集群包含代理实例和抽象化的元数据节点。无服务器集群本身就是一种资源,它们抽象化了所有基础资源。
什么是代理?
在 Apache Kafka 中,代理是指构成 Apache Kafka 集群的各个服务器。它们负责存储和复制发布到 Kafka 主题的数据、管理这些主题内的分区、处理客户端请求(生成和使用消息),并相互协调以维护 Kafka 部署的整体状态。代理是支持 Kafka 的分布式、可扩展和容错架构的核心组件。
我可以在 MSK 集群上预置哪些代理实例大小?
对于预置的集群,您可以选择 EC2 T3.small 示例或者 EC2 M7g 和 M5 实例系列内的实例。对于无服务器集群,代理是完全抽象的。 MSK 还提供了标准代理和快速代理类型。
是否需要预置代理启动卷和为其支付费用?
不需要,您预置的每个代理都包括由 Amazon MSK 服务托管的启动卷存储。
当我创建 Apache Kafka 集群时,基础资源(例如 Amazon EC2 实例)是否会显示在我的 Amazon EC2 控制台中?
有些资源,例如弹性网络接口(ENI),将显示在您的 Amazon EC2 账户中。其他 Amazon MSK 资源不会显示在您的 Amazon EC2 账户中,因为它们由 Amazon MSK 服务管理。
我需要在 MSK 集群中预置哪些资源?
对于预置的集群,您需要为您创建的每个集群预置代理实例。在标准代理上,您需要预置存储,并可以选择为存储卷启用预置的存储吞吐量,这些存储卷可以用来扩展 I/O,而无需预置其他代理。使用快速代理,您无需预置或管理存储。对于所有集群类型,您无需预置 Apache ZooKeeper 或 KRaft 节点等元数据节点,因为您创建的每个集群都包含这些资源,无需额外付费。对于无服务器集群,您只需创建一个作为资源的集群。
数据复制在 Amazon MSK 中的工作原理是什么?
Amazon MSK 使用 Apache Kafka 的主从复制在代理之间复制数据。借助 Amazon MSK,您可以使用多可用区复制功能轻松部署集群。使用标准代理,您可以选择按主题使用自定义复制策略。快速代理始终在三个可用区中复制您的数据,以确保更高的可用性。将使用指定的代理类型和复制策略,部署和隔离主代理和从代理。例如,如果您选择一些使用三种可用区代理复制策略的标准代理,其中每个可用区集群具有一个代理,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 具有哪些部署选项?
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 预置是一个 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 支持 M7g 集群吗?
是的,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 API 和工具使用标准的 Apache Kafka 客户端。
我需要为快速代理自定义哪些 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 对快速代理的传输中数据进行加密。
标准代理和快速代理之间的 Amazon MSK 功能有何区别?
大多数适用于标准代理的 MSK 预置特性和功能也适用于使用快速代理的集群。一些区别包括:存储管理、实例类型可用性和支持的版本。请参见 MSK 预置中的标准代理和快速代理的对比表,其中重点介绍了一些关键的异同。
我可以将现有的 Kafka 工作负载迁移到快速代理吗?
是的,您可以使用 MirrorMaker 2 或 Amazon MSK 复制器将 Kafka 集群中的数据迁移到由快速代理组成的集群,Amazon MSK 复制器可以将集群的数据和元数据复制到新集群。您可以在《Amazon MSK 开发人员指南》中详细了解如何使用 MirrorMaker 2 和 MSK 复制器。
我应该如何在标准和快速 MSK 预置代理类型之间进行选择?
快速代理可以提供更高的性价比和弹性以及更低的运营开销,因此成为了 MSK 预置上的所有 Apache Kafka 工作负载的理想选择。但如果您希望控制代理的更多配置和设置,可以选择标准代理类型。使用标准代理,您可以自定义更广泛的 Kafka 配置,包括复制系数、日志文件大小和领导选举策略,这样,您就对集群设置拥有了更高的灵活性。
Amazon MSK 无服务器
什么是 MSK 无服务器?
MSK 无服务器是 Amazon MSK 的一种集群类型,它可以帮助您轻松运行 Apache Kafka 集群,无需管理计算和存储容量。使用 MSK 无服务器,您可以轻松运行您的应用程序,而无需预置、配置或优化集群,并且您只需按您流式传输和保留的数据量付费。
MSK 无服务器是否在集群中自动均衡分区?
是的,MSK 无服务器可以全面管理分区,包括监控和移动分区,甚至跨集群加载分区。
MSK 无服务器支持的数据吞吐能力如何?
MSK 无服务器针对每个集群提供高达 200 MBps 的写入容量和 400 MBps 的读取容量。此外,为确保集群中所有分区都有足够的吞吐量可用,MSK 无服务器为每个分区分配了高达 5 MBps 的即时写入容量和 10 MBps 的即时读取容量。
MSK 无服务器提供哪些安全功能?
MSK 无服务器使用通过 AWS KMS 颁发的服务托管式密钥,对传输中的所有流量和所有静态数据进行加密。客户端通过使用 AWS PrivateLink 的私有连接连接到 MSK 无服务器,不会将您的流量暴露给公有网络。此外,MSK 无服务器还提供了 AWS Identity and Access Management(IAM)访问控制,您可以使用它管理对 Apache Kafka 资源(例如主题)进行的客户端身份验证和客户端授权。
生产者和使用者如何访问我的 MSK 无服务器集群?
当创建一个 MSK 无服务器集群时,您需要提供一个或多个托管此集群的客户端的 Amazon Virtual Private Cloud(VPC)的子网。在上述任何 Amazon VPC 中托管的客户端可以使用它的引导代理字符串连接到 MSK 无服务器集群。
MSK 无服务器可用的区域有哪些?
要了解最新的区域可用性,请参阅 Amazon MSK 定价页面。
MSK 无服务器支持哪些身份验证类型?
MSK 无服务器目前支持使用 IAM(Identity Access Management)进行客户端身份验证和授权。您的客户端可以承担 IAM 角色进行身份验证,并且您可以使用关联的 IAM 策略实施访问控制。
如何处理 MSK 无服务器集群中的数据?
您可以使用任何与 Apache Kafka 兼容的工具来处理 MSK 无服务器集群主题中的数据。MSK 无服务器与适用于 Apache Flink 的亚马逊托管服务集成,用于有状态的流处理;并与 AWS Lambda 集成,用于事件处理。您还可以使用 Apache Kafka Connect 接收器连接器将数据发送到任何所需的目的地。
MSK 无服务器如何确保高可用性?
创建分区时,MSK 无服务器会为分区创建两个副本,并将它们放在不同的可用区中。此外,MSK 无服务器会自动检测和恢复失败的后端资源,以保持高可用性。
迁移到 Amazon MSK
是否可以将现有 Apache Kafka 集群内的数据迁移到 Amazon MSK?
可以,您可以使用第三方工具或 Apache Kafka 支持的开源工具(例如 MirrorMaker2)将集群中的数据复制到 MSK 集群。请咨询此 Amazon MSK 迁移实验室,以帮助您规划迁移。
联网
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 VPC 外部的经过授权的客户端可以将加密数据传入和传出特定的 Amazon MSK 集群。您可以在集群创建后免费为 MSK 集群启用公开访问,集群入口和出口将按标准 AWS 数据传输成本计费。要了解有关如何开启公开访问的更多信息,请参阅公开访问文档。
我的客户端和 Amazon MSK 集群之间的连接是否是私有的?
默认情况下,要从 Amazon MSK 集群生成和使用数据,只能通过 VPC 中的客户端与 Amazon MSK 集群之间的私有连接进行。但如果您为 MSK 集群开启公开访问并使用公有引导代理字符串连接到 MSK 集群,此连接即使经过了身份验证、授权和加密,也不再被视为私有。我们建议您将集群的安全组配置为具有入站 TCP 规则,允许从您信任的 IP 地址进行公开访问,并在开启公开访问时尽可能限制这些规则。
如何从 AWS 网络内部但在集群的 Amazon VPC 外部连接到我的 Amazon MSK 集群?
您可以为运行 Apache Kafka 2.7.1 或更高版本的 MSK 集群开启多 VPC 私有连接,以便从与 MSK 集群的 Amazon VPC 不同的任何 VPC 或 AWS 账户连接到您的 MSK 集群。您只能在为任何支持的身份验证方案(IAM 身份验证、SASL SCRAM 和 mTLS 身份验证)创建集群后开启私有连接。您应将您的客户端配置为使用 Amazon MSK 管理的 VPC 连接私密连接到集群,这些 VPC 连接使用 PrivateLink 技术支持私有连接。要了解有关如何设置私有连接的更多信息,请参阅从 AWS 文档内访问。
加密
我能否加密我的 MSK 集群中的数据?
可以,Amazon MSK 使用 Amazon Elastic Block Store(Amazon EBS)服务器端加密和 AWS KMS 密钥对存储卷进行加密。
在 MSK 集群内的代理之间,数据是否进行传输中加密?
是的,默认情况下,通过 TLS 为新集群启用了传输中加密,以进行代理间通信。对于预置的集群,您可以选择在创建集群时不使用传输中加密。
我的 Apache Kafka 客户端和 Amazon MSK 之间是否在传输中加密数据?
是的,默认情况下,只对从 AWS CLI 或 AWS 管理控制台创建的集群将传输中加密设置为 TLS。客户端需要其他配置才能使用 TLS 加密与集群通信。对于预置的集群,您可以通过选择 TLS/纯文本或纯文本设置来更改加密原定设置。请阅读有关 Amazon MSK 加密的更多信息。
当数据在 MSK 集群中的代理与元数据节点之间移动时,是否对传输中的数据进行加密?
是的,MSK 集群支持在 Kafka 代理与元数据节点之间进行 TLS 传输中加密。
访问管理
如何控制集群身份验证和 Apache Kafka API 授权?
对于无服务器集群,您可以使用 IAM 访问控制进行身份验证和授权。对于预置的集群,您可以使用以下选项:
- 对 AuthN/AuthZ 都使用 IAM 访问控制(推荐)
- 对 AuthN 使用 TLS 证书身份验证,对 AuthZ 使用访问控制列表
- 对 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 操作?
您可以使用 IAM 控制服务 API 操作。
我可以为现有集群启用 IAM 访问控制吗?
可以,您可以从 AWS 管理控制台或使用 UpdateSecurity API 为现有的集群启用 IAM 访问控制。
我可以在 Amazon MSK 外部使用 IAM 访问控制吗?
不可以,IAM 访问控制只适用于 MSK 集群。
如何向与我的 Amazon MSK 账户不同的 AWS 账户中的 Kafka 客户端提供跨账户访问权限,以便私密连接到我的 MSK 集群?
您可以将集群策略附加到 Amazon MSK 集群,为您的跨账户 Kafka 客户端提供设置与 Amazon MSK 集群的私有连接的权限。使用 IAM 客户端身份验证时,您还可以使用集群策略来精细定义连接客户端的 Kafka 数据面板权限。要了解有关集群策略的更多信息,请参阅集群策略文档。
监控、指标、日志记录和标记
如何监控集群或主题的性能?
您可以通过 Amazon MSK 控制台、Amazon CloudWatch 控制台或 JMX 监控集群的性能,并使用带有 Prometheus(一种开源监控解决方案)的开放监控功能来监控主机指标。
不同 CloudWatch 监控级别的成本是多少?
使用 CloudWatch 监控您的集群的成本取决于监控级别和您的 Apache Kafka 集群大小。CloudWatch 按每月每个指标收费,包括 AWS Free Tier。请参阅 Amazon CloudWatch 定价,以了解更多信息。有关每个监控级别公开的指标数量的详细信息,请参阅 Amazon MSK 监控文档。
哪些监控工具与带有 Prometheus 的开放监控功能兼容?
设计用于从 Prometheus 导出器读取数据的工具可以与一些开放监控功能兼容,例如 Datadog、Lenses、New Relic、Sumo Logic 或 Prometheus 服务器。有关开放监控功能的详细信息,请参阅 Amazon MSK 开放监控功能文档。
如何监控客户端的运行状况和性能?
您可以使用您正在使用的 Apache Kafka 版本支持的任何客户端监控。
我能否标记 Amazon MSK 资源?
可以,您可以从 AWS CLI 或 AWS 管理控制台标记 Amazon MSK 集群。
如何监控使用者延迟?
主题级使用者延迟指标作为 Amazon MSK 对所有集群发布到 CloudWatch 的默认一组指标的一部分提供。获取这些指标无需进行额外的设置。
将使用者延迟指标发布到 CloudWatch 的费用是多少?
主题级指标包含在默认的一组 Amazon MSK 指标中,这些指标是免费的。分区级指标按照 Amazon CloudWatch 定价进行收费。
我该如何访问 Apache Kafka 代理日志?
您可以对预置的集群启用代理日志传送。您可以将代理日志传送到 Amazon CloudWatch Logs、Amazon Simple Storage Service(Amazon S3)和 Amazon Data Firehose。Firehose 支持多种传送目的地,包括 Amazon OpenSearch Service。要了解如何启用此功能,请参阅 Amazon MSK 日志记录文档。要了解有关定价的信息,请参阅 Amazon CloudWatch Logs 和 Amazon Data Firehose 定价页面。
代理日志的日志记录级别是什么?
Amazon MSK 为一个预置集群内的所有代理提供 INFO(信息)级日志。
我可以记录 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 节点进行元数据管理。
什么是 Apache KRaft?
Apache KRaft 是一种共识协议,它将 Kafka 集群中的元数据管理从外部 Apache ZooKeeper 节点转移到 Kafka 内的一组控制器。此更改允许将元数据作为 Kafka 代理中的主题进行存储和复制,从而加快元数据的传播速度。 要了解更多信息,请参阅我们的 Apache KRaft 文档。
与 ZooKeeper 模式相比,在 Amazon MSK 上使用 KRaft 模式是否需要进行任何 API 更改?
无需更改 API 即可在 Amazon MSK 上使用 KRaft 模式。但是,如果您的客户端今天仍然使用 --zookeeper 连接字符串,您应该更新客户端以使用 --bootstrap-server 连接字符串来连接到集群并执行管理操作。--zookeeper 标志在 Apache Kafka 版本 2.5 中已弃用,并从 Kafka 3.0 开始删除。因此,我们建议您使用最新的 Apache Kafka 客户端版本和 --bootstrap-server 连接字符串。
我有可以连接到 ZooKeeper 的工具;如果没有 ZooKeeper,这些工具将如何用于 KRaft 集群?
您应确保您使用的任何工具都能在没有 ZooKeeper 连接的情况下使用 Kafka 管理员 API。请参阅我们有关如何对 KRaft 模式集群使用 Cruise Control 的最新文档。Cruise Control 还发布了在没有 ZooKeeper 连接的情况下运行 Kafka 需要遵循的步骤。
与基于 ZooKeeper 的集群相比,我可以在基于 KRaft 的集群上为每个代理托管更多分区吗?
在基于 Kraft 和 ZooKeeper 的集群上,每个代理的分区数量相同。但是,KRaft 允许您通过在集群中配置更多代理来为每个集群托管更多分区。
集成
Amazon MSK 与哪些 AWS 服务集成?
Amazon MSK 与以下 AWS 服务集成:
- Amazon S3,使用 Firehose 以无代码方式将数据从 Amazon MSK 传输到 Amazon S3
- Amazon VPC,用于提供网络隔离和安全性
- Amazon CloudWatch,用于指标
- AWS KMS,用于存储卷加密
- IAM,用于对 Apache Kafka 和服务 API 进行身份验证和授权
- AWS Lambda,用于 Amazon MSK 事件获取
- AWS IoT Core,用于物联网事件获取
- AWS Glue Schema Registry,用于控制 Apache Kafka 应用程序使用的架构的演变
- AWS CloudTrail,用于 AWS API 日志
- AWS Certificate Manager,用于客户端 TLS 身份验证中使用的私有 CA
- AWS CloudFormation,用于使用代码描述和预置 Amazon MSK 集群
- 适用于 Apache Flink 的亚马逊托管服务,适用于用来处理流式传输数据的完全托管式 Apache Flink 应用程序
- 适用于 Apache Flink Studio 的亚马逊托管服务,适用于 Apache Kafka 上的交互式流式传输 SQL
- AWS Secrets Manager,用于用来进行 SASL/SCRAM 身份验证的客户端凭证
Amazon MSK 无服务器与以下 AWS 服务集成:
- Amazon S3,使用 Firehose 以无代码方式将数据从 MSK 传输到 Amazon S3
- Amazon VPC,用于提供网络隔离和安全性
- Amazon CloudWatch,用于指标
- IAM,用于对 Apache Kafka 和服务 API 进行身份验证和授权
- AWS Glue Schema Registry,用于控制 Apache Kafka 应用程序使用的架构的演变
- AWS CloudTrail,用于 AWS API 日志
- AWS PrivateLink,用于私有连接
复制
什么是 Amazon MSK 复制器?
Amazon MSK 复制器是 Amazon MSK 的一项功能,可以帮助客户在不同的 AWS 区域(跨区域复制)或同一个 AWS 区域(同区域复制)中的 MSK 集群之间可靠地复制数据,而无需编写代码或管理基础设施。您可以使用跨区域复制功能构建高可用性和容错性的多区域流式传输应用程序,从而提高弹性。您还可以通过跨区域复制功能为不同地理区域中的使用者提供延迟更低的访问。您可以使用同区域复制功能将数据从一个集群分发到多个集群,以便与您的合作伙伴和团队共享数据。您还可以使用同区域复制功能将来自多个集群的数据聚合到一个集群中,以进行分析。
如何使用 MSK 复制器?
要在一对源 MSK 集群和目标 MSK 集群之间设置复制,您需要在目的地区域创建一个复制器。要创建复制器,您需要指定详细信息,其中包括源 MSK 集群和目标 MSK 集群的 Amazon 资源名称(ARN)以及可供 MSK 复制器用来访问集群的 IAM 角色。如果目标 MSK 集群尚不存在,则需要创建一个。
MSK 复制器支持哪种类型的 Kafka 集群?
MSK Replicator 仅支持在 MSK 集群之间进行复制。支持预置和无服务器类型的 MSK 集群。您还可以使用 MSK 复制器从预置类型切换到无服务器类型,或者使用其他不受支持的 Kafka 集群进行反方向切换。
我是否可以指定要复制哪些主题?
是的,您可以在创建 Replicator 时使用允许和拒绝列表来指定要复制的主题。
MSK 复制器是否会复制主题设置和使用者组偏移?
是的,MSK 复制器会自动复制必要的 Kafka 元数据,例如主题配置、ACL 和使用者组偏移,以使使用这些元数据的应用程序能够在失效转移之后无缝继续处理。如果您只想复制数据,则可以选择关闭其中一项或多项设置。您还可以在创建 Replicator 时使用允许或拒绝列表来指定要复制哪些使用者组。
当我的入口吞吐量发生变化时,我是否需要扩展复制?
不需要,MSK 复制器会自动部署、预置和扩展底层复制基础设施,以支持入口吞吐量的变化。
我能否在不同 AWS 账户的 MSK 集群之间复制数据?
不能,MSK Replicator 仅支持在同一 AWS 账户的不同 MSK 集群之间进行复制。
如何监控复制?
您可以在目标区域中使用 CloudWatch 查看每个 Replicator 的主题和聚合级别的 ReplicationLatency、
MessageLag 和 ReplicatorThroughput 指标,无需额外付费。这些指标将显示在 AWS/Kafka 命名空间中的 ReplicatorName 下方。您还可以查看 ReplicatorFailure、AuthError 和 ThrottleTime 指标,以了解您的复制器是否遇到了任何问题。
如何使用复制来提高流式处理应用程序跨区域的弹性?
您可以使用 MSK 复制器设置主动-主动或主动-被动集群拓扑,以提高 Kafka 应用程序跨区域的弹性。在主动-主动设置中,两个 MSK 集群都主动提供读取和写入服务。相比之下,在主动-被动设置中,一次只有一个 MSK 集群主动提供流式传输数据,而另一个集群则处于待机状态。
我能否使用 MSK 复制器将数据从一个集群复制到多个集群,或者将数据从多个集群复制到一个集群?
符合。通过为每个源集群和目标集群对创建一个不同的复制器,您可以将数据从一个集群复制到多个集群,或者将数据从多个集群复制到一个集群。
MSK 复制器如何连接到源 MSK 集群和目标 MSK 集群?
MSK 复制器使用 IAM 访问控制连接到您的源集群和目标集群。您需要为创建复制器的 IAM 访问控制开启源 MSK 集群和目标 MSK 集群。由于 Amazon MSK 同时支持多种身份验证方法,因此您可以继续为您的客户端同时使用其他身份验证方法,包括 SASL/SCRAM 和 mTLS。
MSK 复制器可以实现多大的复制延迟?
MSK 复制器异步复制数据。复制延迟取决于许多因素,包括 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 定价,以了解更多信息。
是否因数据复制而需要支付数据传输费用?
不需要,集群中的数据传输包含在服务中,无需额外付费。
在哪些区域可以使用 Amazon MSK?
有关可以使用 Amazon MSK 的区域的信息,请访问 AWS 区域表。
数据传输如何定价?
使用预置的集群时,您需要为传入和传出 MSK 集群的数据支付标准的 AWS 数据传输费用。您不需要为一个区域中的集群内的数据传输支付任何费用,包括代理之间的数据传输以及代理与元数据管理节点之间的数据传输。
使用无服务器集群时,您需要为传入和传出另一个区域的数据以及传到公有网络的数据支付标准的 AWS 数据传输费用。
Amazon MSK 是否提供预留实例定价?
否,目前不提供。
合规性
Amazon MSK 符合哪些合规性计划?
服务水平协议
Amazon MSK SLA 提供什么保证?
我们的 Amazon MSK SLA 保证 Amazon MSK(包括 MSK Serverless 和 MSK Connect)的月度正常运行时间百分比至少达到 99.9%。
怎样确定我是否有资格获得 SLA 服务抵扣?
如果 Amazon MSK 上的多可用区部署在任何每月计费周期中的月度正常运行时间百分比低于 99.9%,根据 Amazon MSK SLA,您将有资格获得 Amazon MSK 的 SLA 抵扣。
有关 SLA 的所有条款和条件的完整详细信息以及有关如何提交索赔的详细信息,请参阅 Amazon MSK SLA 页面。