一般性问题
问:什么是 Apache Kafka?
问:什么是流数据?
问:Apache Kafka 的主要功能是什么?
- Apache Kafka 以容错的方式将流数据存储为一系列连续的记录,并保留记录的生成顺序。
- Apache Kafka 充当数据生产者和数据使用者之间的缓冲区。Apache Kafka 允许许多数据生产者(例如网站、IoT 设备、Amazon EC2 实例)持续发布流数据并使用 Apache Kafka 主题对这些数据进行分类。多个数据使用者(例如机器学习应用程序、Lambda 函数)以自己的速率从这些主题中读取,类似于消息队列或企业消息收发系统。
- 数据使用者以先进先出的方式处理来自 Apache Kafka 主题的数据,从而保留数据的生成顺序。
问:Apache Kafka 的关键概念是什么?
问:何时应使用 Apache Kafka?
Apache Kafka 用于支持转换、传输和响应流数据的实时应用程序,还用于构建可在多个系统或应用程序之间可靠地获取数据的实时流数据管道。
问:Amazon MSK 有什么用?
Amazon MSK 让您可以轻松启动并在亚马逊云科技运行 Apache Kafka 的开源版本,具有高可用性和安全性,同时提供与亚马逊云科技服务的集成,而不会产生运行 Apache Kafka 集群的运营开销。通过 Amazon MSK,您可以使用和配置 Apache Kafka 的开源版本,同时该服务可管理 Apache Kafka 集群的设置、预置、亚马逊云科技集成和持续维护。
只需在控制台中单击几下,您就可以预置 Amazon MSK 集群。预置完成后,Amazon MSK 将取代运行状况不佳的代理,自动复制数据以获得高可用性,管理 Apache ZooKeeper 节点,根据需要自动部署硬件补丁,管理与亚马逊云科技服务的集成,通过控制台显示重要指标,并且支持 Apache Kafka 版本升级,因此您可以利用对 Apache Kafka 的开源版本所做的改进。
问:Amazon MSK 支持哪些 Apache Kafka 版本?
是的,Amazon MSK 原生支持所有数据层面和管理 API。
问:Amazon MSK 是否支持 Apache Kafka AdminClient?
可以。
数据生产和使用
问:是否可以使用 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
版本升级
集群
只需在 亚马逊云科技管理控制台中单击几下或使用 亚马逊云科技开发工具包,即可创建第一个集群。首先,在 Amazon MSK 控制台中选择要在其中创建 Amazon MSK 集群的 亚马逊云科技区域。选择集群的名称、要与集群一起运行的 VPC、集群的数据复制策略和每个可用区的子网。接下来,选择每个可用区的代理实例类型和代理数量,然后单击“创建”。
每个集群都包含代理实例、预置存储和 Apache ZooKeeper 节点。
否,目前不提供。
否,您预置的每个代理都包含由 Amazon MSK 服务管理的引导卷存储。
弹性网络接口 (ENI) 等一些资源将显示在您的 Amazon EC2 账户中。其他 Amazon MSK 资源不会显示在您的 EC2 账户中,因为这些资源由 Amazon MSK 服务管理。
您需要在您创建的每个集群中预置代理实例和代理存储。您无需预置 Apache ZooKeeper 节点,因为这些资源免费包含在您创建的每个集群中。
除非另有说明,否则 Amazon MSK 使用 Apache Kafka 开源版本指定的相同默认配置。要查看默认设置,请访问 此处。
问:我是否可以预置代理,使它们的数量在可用区之间不平衡(例如,us-east-1a 中 3 个、us-east-1b 中 2 个、us-east-1c 中 1 个)?
否,Amazon MSK 实施这项最佳实践:在集群内,使代理数量在可用区之间保持平衡。
Amazon MSK 使用 Apache Kafka 的领导者/追随者复制机制在代理之间复制数据。Amazon MSK 可以轻松部署具有多可用区复制的集群,并可让您选择按主题使用自定义复制策略。默认情况下,对于每个复制选项,系统将使用指定的复制策略部署和隔离领导者及追随者代理。例如,如果您选择 3 个可用区代理复制策略,而且每个可用区集群有 1 个代理,则 Amazon MSK 将创建一个包含三个代理的集群(一个区域中的三个可用区各有 1 个代理),而且默认情况下(除非您选择覆盖主题复制因子)主题复制因子也将为 3。
问:我是否可以更改默认代理配置或将集群配置上传到 Amazon MSK?
主题
联网
连接到 VPC
问:如何通过互联网连接到 Amazon MSK 集群?
最简单的方法是通过互联网向运行 Apache Kafka 2.6.0 或更高版本的 MSK 集群的代理开启公共连接。出于安全原因,您不能在创建 MSK 集群时开启公共访问权限。但是,您可以更新现有集群,使其可公开访问。您还可以创建一个新集群,然后对其进行更新,使其可公开访问。要了解有关开启公共访问的更多信息,请参阅公共访问文档。
问:如何从亚马逊云科技中国网络内部、我的 Amazon MSK 集群所在的 Amazon VPC 外部连接到我的 Amazon MSK 集群?
为运行 Apache Kafka 版本 2.7.1 或更高版本的 MSK 集群开启多 VPC 私有连接后,您即可从任何非您的 MSK 集群所在的任何 VPC 或亚马逊云科技账户连接到您的 MSK 集群。只有在创建集群后才能为任何受支持的身份验证方案(IAM 身份验证、SASL SCRAM 和 mTLS 身份验证)启用私有连接。Amazon MSK 使用 Amazon PrivateLink 技术来启用私有连接,您应该将您的客户端配置为使用 Amazon PrivateLink 端点连接到集群。要了解有关设置私有连接的更多信息,请参阅从亚马逊云科技内访问文档。
加密
可以,Amazon MSK 使用 Amazon EBS 服务器端加密和 Amazon KMS 密钥来加密存储卷。
会。对于代理间的通信,新集群默认通过 TLS 启用传输中加密。创建集群时,您可以选择不使用传输中加密。
会。默认情况下,仅对于从 CLI 或 亚马逊云科技控制台创建的集群,传输中加密才会设置为 TLS。要让客户端与使用 TLS 加密的集群进行通信,需要进行其他配置。您可以通过选择 TLS/纯文本或纯文本设置来更改默认加密设置。阅读更多: MSK 加密
不会,与 Apache Kafka 捆绑在一起的 Apache Zookeeper 默认版本不支持加密。然而,需要注意的是,Apache Zookeeper 与 Apache Kafka 代理之间的通信仅限于代理、主题和分区状态信息。
访问管理
问:如何控制集群身份验证和 Apache Kafka API 授权?
Amazon MSK 提供了三种用于控制身份验证 (AuthN) 和授权 (AuthZ) 的选项。1) AuthN/Z 的 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 操作?
您可以使用 Amazon IAM 控制服务 API 操作。
问:我可以为现有集群启用 IAM 访问控制吗?
不能,但是即将推出允许您更新身份验证设置的功能。
问:我可以在 Amazon MSK 之外使用 IAM 访问控制吗?
不能,IAM 访问控制仅适用于 Amazon MSK 集群。
问:能否更新集群上的身份验证设置?
您可以通过控制台或者 update-security API 为启用启用或禁用身份验证模式。使用 API 时,显式声明的身份验证模式将会相应地更改,而省略的身份验证模式则会保持原样。例如,如果您的集群使用 mTLS 进行身份验证并且您通过调用 update-security API 启用 IAM 访问控制,则您的集群上的 mTLS 和 IAM 访问控制均会启用。
问:能否在我的集群上启用多种身份验证模式?
可以,您可以在创建和更新过程中为集群添加多钟身份验证模式。对于集群内的代理,每种身份验证模式均有专用端口,并且通过这些端口连接到 Kafka 的客户端必须启用相应的身份验证模式。
问:能否在集群上禁用身份验证模式?
可以,您可以禁用身份验证模式。为了确保您的客户端不会中断与代理的连接,在所有客户端更新为使用其他可用身份验证模式之前,请勿禁用任何现有身份验证模式。
问:能否使用集群上的身份验证模式跟踪客户端?
可以,您可以使用发布到 Amazon CloudWatch 指标的 ClientConnectionCount 指标按身份验证模式跟踪当前连接的数量。
问:如何向非 Amazon MSK 所在的亚马逊云科技账户中的 Kafka 客户端提供跨账户存取,以私密连接到我的 Amazon MSK 集群?
您可以向您的 Amazon MSK 集群附加一个集群策略,来提供跨账户 Kafka 客户端权限,以便设置与 Amazon MSK 集群的私有连接。使用 IAM 客户端身份验证时,您还可以使用集群策略为连接的客户端精细定义 Kafka 数据面板权限。要了解有关集群策略的更多信息,请参阅集群策略文档。
监控、指标、日志记录、标记
问:如何监控集群或主题的性能?
您可以使用 Amazon MSK 控制台、Amazon CloudWatch 控制台来监控集群性能,也可以使用开源监控解决方案 Open Monitoring with Prometheus 访问 JMX 和主机指标。
问:不同 CloudWatch 监控级别的费用各是多少?
使用 Amazon CloudWatch 监控集群时的费用取决于您的 Apache Kafka 集群的监控级别和大小。Amazon CloudWatch 按照每月每个指标收费,并提供免费套餐;有关更多信息,请参阅 Amazon CloudWatch 定价。有关各个监控级别公开的指标数量的详细信息,请参阅 Amazon MSK 监控文档。
问:哪些监控工具与 Open Monitoring with Prometheus 兼容?
设计为可以读取 Prometheus 导出程序的数据的工具均兼容 Open Monitoring,例如:Datadog、Lenses、New Relic、Sumologic 或 Prometheus 服务器。有关 Open Monitoring 的详细信息,请参阅 Amazon MSK Open Monitoring 文档。
问:如何监控客户端的运行状况和性能?
您可以使用您当前使用的 Apache Kafka 版本支持的任何客户端监控工具。
问:我可以标记 Amazon MSK 资源吗?
可以,您可以通过 Amazon CLI 或控制台标记 Amazon MSK 集群。
问:如何监控使用器滞后?
主题级别的使用器滞后指标可作为 Amazon MSK 为所有集群发布到 Amazon CloudWatch 的默认指标集的一部分。无需进行其他设置即可获取这些指标。要获得分区级别的指标(分区维度),您可以在集群上启用增强型监控 (PER_PARTITION_PER_TOPIC)。此外,您也可以在集群上启用开放监控,并使用 Prometheus 服务器,以从集群中的代理获取分区级别的指标。和其他 Kafka 指标一样,使用器滞后指标可在端口 11001 获得。
问:将使用器滞后指标发布到 Amazon CloudWatch 需要多少费用?
主题级别的指标包含在默认的 Amazon MSK 指标集中,这些指标是免费的。分区的级别指标按 Amazon CloudWatch 定价收费。
Apache ZooKeeper
问:什么是 Apache ZooKeeper?
来自 https://zookeeper.apache.org/:“Apache ZooKeeper 是一种集中式服务,用于维护配置信息、执行命名,并提供分布式同步和群组服务。所有这些类型的服务都以某种形式供分布式应用程序使用,”包括 Apache Kafka 在内。
问:Amazon MSK 是否使用 Apache ZooKeeper?
是的,Amazon MSK 使用 Apache ZooKeeper,并将每个集群中的 Apache ZooKeeper 作为 Amazon MSK 服务的一部分进行管理。每个集群均免费包含 Apache ZooKeeper 节点。
问:我的客户端如何与 Apache ZooKeeper 交互?
您的客户端可以通过该服务提供的 Apache ZooKeeper 终端节点与 Apache ZooKeeper 进行交互。此终端节点在 亚马逊云科技管理控制台中提供,或使用 DescribeCluster API 提供。
集成
问:Amazon MSK 与哪些亚马逊云科技集成?
Amazon MSK 可与以下服务集成:
- 用于网络隔离和安全的 Amazon VPC
- 用于指标的 Amazon CloudWatch
- 用于存储卷加密的 Amazon KMS
- 用于 Apache Kafka 和服务 API 的身份验证和授权的 Amazon IAM。
- 用于 MSK 事件溯源的 Amazon Lambda
- 用于物联网事件溯源的 Amazon IoT
- 用于控制 Apache Kafka 应用程序使用的架构演变的 Amazon Glue Schema Registry
- 用于 Amazon API 日志的 Amazon CloudTrail
- 用于客户端 TLS 身份验证的私有 CA 的 Amazon Certificate Manager
- 用于使用代码描述和预置 Amazon MSK 集群的 Amazon CloudFormation
- 用于处理流数据的完全托管式 Apache Flink 应用程序的 Amazon Kinesis Data Analytics
- 用于 SASL/SCRAM 身份验证的客户端凭证的 Amazon Secrets Manager
缩放
问:如何扩大集群中的存储?
您可以使用 亚马逊云科技管理控制台或 Amazon CLI 扩展集群中的存储。
问:我是否可以扩展现有集群中的代理数量?
是。您可以扩展或增加现有 Amazon MSK 集群中的代理数量。
问:我是否可以扩展现有集群中代理实例的大小?
否。Amazon MSK 目前不支持扩展现有集群中代理实例的大小,但是我们已经有此计划。
定价和可用性
问:Amazon MSK 如何定价?
定价基于 Apache Kafka 代理小时数和预置存储小时数。亚马逊云科技数据传输费率适用于传入传出 Amazon MSK 的数据。有关更多信息,请访问我们的定价页面。
问:我是否需要为数据复制所产生的数据传输付费?
不需要,服务已经涵盖所有集群内数据传输,无需额外付费。
问:数据传输如何定价?
您需要为传入和传出 Amazon MSK 集群的数据量支付标准的 亚马逊云科技数据传输费用。您不需要为一个区域中集群内的数据传输付费,包括代理间数据传输以及代理与 Apache ZooKeeper 节点之间的数据传输。
服务等级协议
我们的 Amazon MSK SLA 保证 Amazon MSK 的月度正常运行时间百分比至少达到 99.9%。
问:怎样确定我是否有资格获得 SLA 服务抵扣?
如果在任何月度账单周期内,Amazon MSK 上的多可用区部署在任何每月计费周期中的月度正常运行时间百分比低于 99.9%,那么根据 Amazon MSK SLA,您符合 Amazon MSK 的 SLA 抵扣资格。
开始使用 Amazon MSK
访问 Amazon MSK 定价页面。
请参阅本分步指南,了解如何在 Amazon MSK 上设置 Apache Kafka 集群。
开始在 Amazon MSK 上运行您的 Apache Kafka 集群。登录 Amazon MSK 控制台。