一般性问题
问:什么是 Amazon Kinesis Data Streams?
借助 Kinesis Data Streams,您可以构建用于处理或分析流数据的自定义应用程序,以满足特定需求。您可将来自成千上万个来源的点击流、应用程序日志和社交媒体等数据添加到 Kinesis 数据流。在数秒内,您的应用程序便可以从数据流读取和处理数据。
问:Kinesis Data Streams 可代我管理哪些内容?
Kinesis Data Streams 可管理在数据吞吐量层面流处理您的数据所需的基础设施、存储、网络和配置。您无需担心数据流硬件、软件或其他服务的预置、部署和持续维护。此外,Kinesis Data Streams 还可以跨三个可用区同步复制数据,实现高可用性和数据持久性。预设情况下,Kinesis Data Streams 会自动扩展容量,从而将您从资源调配和容量管理中解放出来。如果想要自行调配和管理吞吐量,可以选择预置模式。
问:Kinesis Data Streams 有何用途?
Amazon Kinesis Data Streams 对于从数据创建器快速移出数据,然后进行持续处理非常有用。原因在于,在传输数据到数据存储、运行实时指标和分析或得出更复杂的数据流进行进一步处理之前,会转换数据。
以下是使用 Kinesis Data Streams 的典型情景:
- 加速日志和数据传送获取:您无需等待批量处理数据,而是让创建器在生成数据后立即输入 Kinesis 数据流,防止因数据创建器出现故障导致的数据损失。例如,系统和应用程序日志可以持续添加到数据流并可在数秒内进行处理。
- 实时指标和报告:您可以实时从 Kinesis 数据流数据提取指标并生成报告。例如,您的 Amazon Kinesis 应用程序可以处理系统和应用程序日志的指标和报告,因为数据不断流入而不是等待收到批量数据。
- 实时数据分析:通过 Kinesis Data Streams,您可以运行实时流数据分析。例如,您可以将点击流添加到 Kinesis 数据流,并让您的 Kinesis 应用程序实时运行分析,从而在数分钟内从数据中获得重要见解,而无需数小时或数天时间。
- 日志和事件数据收集:从服务器、桌面和移动设备等来源中收集日志和事件数据。然后,您可以使用 Amazon Lambda 或适用于 Apache Flink 的亚马逊托管服务构建应用程序,连续处理数据、生成指标、带动实时控制面板,并将聚合数据发送到 Amazon Simple Storage Service(Amazon S3)等存储中。
- 带动事件驱动应用程序: 无论规模大小,快速与 AWS Lambda 配对,以响应或调整环境中事件驱动应用程序中的即时事件。
问:如何使用 Kinesis Data Streams?
注册 AWS 后,可以通过 AWS 管理控制台或 CreateStream 操作创建 Kinesis Data Streams 来开始使用 Kinesis Data Streams。然后,将数据创建器配置为持续向数据流添加数据。您可以选择从 AWS 服务中的现有资源发送数据,例如Amazon DynamoDB、Amazon Aurora、 Amazon CloudWatch 和 AWS IoT Core。然后,您可以使用 AWS Lambda、适用于 Apache Flink 的亚马逊托管服务或 AWS Glue Streaming 快速处理存储在 Kinesis Data Streams 中的数据。您还可以使用 Amazon Kinesis API 或 Amazon Kinesis Client Library(KCL)构建在 Amazon Elastic Compute Cloud(Amazon EC2)、Amazon Elastic Container Service(Amazon ECS)和 Amazon Elastic Kubernetes Service(Amazon EKS)上运行的自定义应用程序。
重要概念
问:什么是 Kinesis Data Streams 中的分区、创建器和消费者?
分区在流中具有一系列数据记录。是 Kinesis 数据流的基本吞吐量单位。分区支持每秒 1 MB 的写入和每秒 1000 条记录,每秒 2 MB 的读取。分区限制可确保可预测的性能,从而易于设计和操作高度可靠的数据流工作流。创建器将数据记录放入分区,消费者从分区中获取数据记录。消费者使用分区进行并行数据处理,并按照存储顺序使用数据。如果写入和读取超过分区限制,创建器和消费者应用程序将收到节流,可以通过重试来处理。
问:什么是记录?
记录是存储在 Amazon Kinesis 数据流中的数据单元。记录由序列号、分区键和数据块组成。数据 Blob 是您的数据创建器添加到数据流的重要数据。数据块的最大尺寸(Base64 编码前的数据有效载荷)是 1 兆字节 (MB)。
问:什么是分区键?
分区键用于隔离记录并路由到不同的数据流分片。分区键由您的数据创建器在添加数据到 Kinesis 数据流时指定。例如,假定您的数据流具有两个分区(分区 1 和分区 2)。您可以将数据创建器配置为使用两个分区键(键 A 和键 B),以将所有带键 A 的记录输入分区 1,同时将所有带键 B 的记录输入分区 2。
问:什么是序列号?
序列号是每个记录的唯一标识符。序列号由 Amazon Kinesis 在数据创建器调用 PutRecord 或 PutRecords 操作以添加数据到 Amazon Kinesis 数据流时分配。同一分区键的序列号通常会随时间变化增加;PutRecord 或 PutRecords 请求之间的时间段越长,序列号则越大。
问:什么是容量模式?
Kinesis Data Streams 的容量模式决定了如何管理容量以及如何为数据流收取使用费。您可以在调配模式和按需模式之间进行选择。在调配模式下,指定数据流的分区数量。数据流的总容量是其分区容量的总和。您可以根据需要增加或减少数据流中的分区数量,并按小时费率支付分区数量。在按需模式下,AWS 管理分区提供必要的吞吐量。您只需为实际使用的吞吐量付费,而 Kinesis Data Streams 在上升或下降时自动满足您的工作负载吞吐量需求。两种容量模式都支持所有 Kinesis Data Streams 写入和读取 API,以及扩展保留和增强型扇出等可选功能。
问:我如何在按需模式和预置模式之间进行选择?
按需模式最适用于具有不可预测和高度可变流量模式的工作负载。如果您更愿意让 AWS 代表您管理容量,或按吞吐量付费定价,应使用此模式。预置模式最适合于可预测的流量,在这种情况下,很容易预测容量需求。如果希望细粒度地控制数据如何分布在分区上,应考虑使用预置模式。如果您希望提供额外的分区,以便使用应用程序可以具有更大的读取吞吐量,从而加快整体处理速度,预置模式也适用。
问:我是否可以在按需模式和预置模式之间进行切换?
可以。您可以在按需和预置模式之间切换。从预置模式切换到按需模式时,数据流的分区数保持不变,反之亦然。通过从预置容量模式切换到按需容量模式,数据流将保留转换之前的分区数。但从那时起,Kinesis Data Streams 将监视您的数据流量,并根据流量的增加或减少向上或向下扩展此按需数据流的分区数。
向 Kinesis Data Streams 添加数据
问:如何向 Amazon Kinesis 数据流添加数据?
您可以通过 PutRecord 和 PutRecords 操作、KPL 或 Amazon Kinesis Agent 将数据添加到 Amazon Kinesis 数据流。
问:PutRecord 和 PutRecords 之间有何区别?
PutRecord 操作允许 API 调用内的单个数据记录,而 PutRecords 操作允许 API 调用内的多个数据记录。有关更多信息,请参阅 PutRecord 和 PutRecords。
问:什么是 Amazon Kinesis Producer Library(KPL)?
KPL 是一个易于使用且高度可配置的程序库,可以帮助您把数据放到 Amazon Kinesis 数据流中。KPL 呈现了简单的异步可靠界面,有助于以最少的客户资源快速实现高创建器吞吐量。
问:什么是 Amazon Kinesis Agent?
Amazon Kinesis Agent 是一款预构建的 Java 应用程序,可提供简单的方法来收集数据并将其发送到 Amazon Kinesis 数据流。您可以在基于 Linux 的服务器环境(如 Web 服务器、日志服务器和数据库服务器)上安装此代理。代理监控特定文件并持续发送数据到数据流。有关更多信息,请参阅使用代理写入。
问:在 PutRecord 或 PutRecords 调用期间,哪些数据计入 Amazon Kinesis 数据流的数据吞吐量?
您的数据 Blob、分区键和数据流名称是 PutRecord 或 PutRecords 调用的必要参数。您的数据 Blob(Base64 编码之前)和分区键的大小将依照 Amazon Kinesis 数据流的数据吞吐量计数,这由数据流内的分区数量确定。
读取和处理来自 Kinesis Data Streams 的数据
问:什么是消费者?Kinesis Data Streams 提供哪些不同的消费者类型?
消费者是一个处理来自 Kinesis 数据流所有数据的应用程序。您可以在共享输出和增强型扇出使用者类型之间进行选择,从 Kinesis 数据流读取数据。共享型扇出使用者共享一个分区 2 MB/秒的读取吞吐量和每秒5个事务的限制,需要使用 GetRecords API。增强型扇出使用者可以获得自己的 2 MB/秒读取吞吐量分配,多个使用者可以同时从同一流读取数据,而不会与其他使用者争夺读取吞吐量。您需要将 SubscribeToShard API 与增强型扇出使用者一起使用。如果要向数据流添加多个使用者,建议使用增强型输出使用者。
问:我如何处理在 Kinesis Data Streams 中捕获和存储的数据?
您可以使用 AWS Lambda、适用于 Apache Flink 的亚马逊托管服务或 AWS Glue 等托管式服务处理存储在 Kinesis Data Streams 中的数据。这些托管服务负责调配和管理底层基础架构,因此您可以专注于编写业务逻辑。您还可以使用其与 Kinesis Data Firehose 的预构建集成,将存储在 Kinesis Data Streams 中的数据交付给 Amazon S3、Amazon OpenSearch Service、Amazon Redshift 及自定义的 HTTP 端点。您还可以使用 Amazon Kinesis Client Library、预构建库或 Amazon Kinesis Data Streams API 构建自定义应用程序。
问:什么是 Amazon Kinesis Client Library(KCL)?
适用于 Java、Python、Ruby、Node.js 和 .NET 的 KCL 是一个预构建库,可帮助您轻松构建 Amazon Kinesis 应用程序,用以读取和处理来自 Amazon Kinesis 数据流的数据。
KCL 可以处理各种复杂的问题,如适应数据流的数量变化、均衡流数据负载、协调分布式服务以及以容错方式处理数据。KCL 可让您在构建应用程序时专注于业务逻辑。 有关 KCL 的更多详细信息,请参阅此处的 Kinesis Data Streams 文档。
问:什么是 SubscribeToShard API?
SubscribeToShard API 是一种高性能的流式处理 API,它通过持久连接将数据从分区推送到使用者,不存在客户端发出请求的周期。SubscribeToShard API 使用 HTTP/2 协议在新数据送达分区时向已注册的使用者交付数据(通常在 70 毫秒内),与 GetRecords API 相比,交付速度提高约 65%。即使有多个已注册的使用者从相同的分区中读取数据,使用者也能实现快速的数据交付。
问:什么是增强型扇出功能?
增强型扇出功能是面向 Kinesis Data Streams 使用者的一项可选功能,可在使用者与分区之间提供 2MB/秒的逻辑吞吐量管道。这让您可以增加并行地从数据流中读取数据的使用者数量,同时保持高性能。
问:为什么应该使用增强型扇出功能?
如果您有多个使用者在并行从数据流中检索数据,或者预期会出现这种情况,或者您至少有一名使用者需要使用 SubscribeToShard API 来在创建者与使用者之间提供低于 200 毫秒的数据交付速率,那么就应该使用增强型扇出功能。
问:使用者如何利用增强型扇出功能?
使用者通过使用 SubscribeToShard API 检索数据利用增强型扇出功能。已注册的使用者的名称在 SubscribeToShard API 内使用,这会让系统向已注册的使用者提供增强型扇出功能的好处。
问:能否让部分使用者使用增强型扇出功能,而另外一部分使用者不使用此功能?
可以。您可以让多个使用者使用增强型扇出功能,而其他使用者不使用此功能。增强型扇出功能的使用并不影响传统 GetRecords 使用的分区限制。
问:如果我想使用 SubscribeToShard,是否需要使用增强型扇出功能?
可以。要使用 SubscribeToShard,您需要注册您的使用者,注册后方可激活增强型扇出功能。预设情况下,通过 SubscribeToShard 检索数据时,您的使用者会自动使用增强型扇出功能。
按需模式
问:使用按需模式将数据写入数据流的原定设置吞吐量配额是多少?
在按需模式下创建的新数据流的写入配额为 4 MB/秒和 4000 条记录/秒。预设情况下,这些流自动扩展到 200 MB/秒和 200000条记录/秒以进行写入。
问:数据流如何在按需模式下扩展以处理写入吞吐量的增加?
按需模式下的数据流最多可容纳过去30天中观察到的前一峰值写入吞吐量的两倍。数据流的写入吞吐量达到新的峰值时,Kinesis Data Streams 会自动扩展数据流的容量。例如,如果数据流的写入吞吐量在10 MB/秒和40 MB/秒之间变化,那么 Kinesis Data Streams 将确保您可以轻松地使峰值吞吐量(80 MB/秒)翻一番。随后,如果同一数据流保持 50 MB/秒的新峰值吞吐量,数据流将确保有足够的容量来吸收100 MB/秒的写入吞吐量。但是,如果您的流量在15分钟内增长超过前一峰值的两倍,您会看到 "ProvisionedThroughputExceeded" 异常。您需要重试这些限制请求。
问:按需模式下从流中读取数据的吞吐量限制是什么?
按需模式的总读取容量与写入吞吐量成比例增加,确保使用应用程序始终具有足够的读取吞吐量来实时处理传入数据。使用 GetRecords API 读取数据,您至少可以获得两倍的写入吞吐量。我们建议在 GetRecord API 中使用一个使用者,这样当应用程序需要从停机时间恢复时,就有足够的空间。要添加多个消耗应用程序,您需要使用增强型扇出,支持使用 SubscribeToShard API 向数据流添加多达 20 个使用者,每个使用者都有专用的吞吐量。
预置模式
问:预置模式中 Kinesis Data Streams 有哪些限制?
在预置模式下,Kinesis 数据流的吞吐量设计为通过增加数据流中的分区数量来无限制地扩展。
问:预置模式中我如何扩展 Kinesis Data Streams 的容量?
通过使用 SplitShard API 拆分现有分片,可以在配置模式下扩展 Kinesis 数据流容量。您可以通过使用 MergeShard API 合并两个分片来缩小容量。您也可以使用 UpdateShardCount API 将流容量扩展(或缩小)到特定的分区数。
问:在预置模式下,如何决定 Amazon Kinesis 数据流的吞吐量?
Kinesis 数据流的吞吐量由数据流内的分区数量决定。请遵照以下步骤估计在预置模式下您的数据流需要的初始分区数量。注意:通过重新分区功能,您可以动态调整分区的数量。
预计写入数据流的记录的平均大小为千字节 (KB),四舍五入为 1 KB。(average_data_size_in_KB)
预计每秒写入数据流的记录数量。(number_of_records_per_second)
决定并行和独立于数据流使用数据的 Amazon Kinesis 应用程序的数量。(number_of_consumers)
计算传入写入带宽 (KB) (incoming_write_bandwidth_in_KB),这相当于 average_data_size_in_KB 乘以 number_of_records_per_seconds。
计算传出读取带宽 (KB) (outgoing_read_bandwidth_in_KB),这相当于 incoming_write_bandwidth_in_KB 乘以 number_of_consumers。
然后,您可以使用以下公式计算数据流所需的初始分区数(number_of_shards):分片数=最大值(incoming_write_bandwidth_in_KB/1000,outgoing_read_bandwidth_in_KB/2000)
问:预置模式下,可为 Amazon Kinesis 数据流请求的最大吞吐量是多少?
Kinesis 数据流的吞吐量可无限扩展。对于下列 AWS 区域, 默认的分区配额是每个流 500 个分区:美国东部(弗吉尼亚北部)、美国西部(俄勒冈)和欧洲(爱尔兰)。对于所有其他区域,默认分区配额为每个流 200 个分区。您可以使用 AWS Service Quotas 控制台请求增加分区配额。
问:预置模式下,如果数据创建器向数据流添加数时超出 Amazon Kinesis 数据流的容量限制,该怎么办?
预置模式下,Kinesis 数据流的容量限制由流内的分区数量来定义。数据吞吐量或 PUT 记录的数量可能会超出限制。超出容量限制后,输入数据调用将被拒绝,并引发 ProvisionedThroughputExceeded 异常。如果这由临时的数据流输入数据速率增加导致,数据创建器将重试并最终完成请求。如果这是由持续的数据流输入数据速率增加导致的,则应增加数据流内的分区数量,从而为输入数据调用提供持续成功所需的足够容量。在这两种情况下,Amazon CloudWatch 指标都能让您了解数据流输入数据速率的变化,以及 ProvisionedThroughputExceeded 例外的出现。
问:如果 Amazon Kinesis 应用程序从预置模式下的数据流读取数据时超出 Amazon Kinesis 数据流的容量限制该怎么办?
预置模式下,Kinesis 数据流的容量限制由流内的分区数量来定义。数据吞吐量或读取数据调用数量会超出限制。超出容量限制时,读取数据调用将被拒绝,并引发 ProvisionedThroughputExceeded 异常。如果这由临时的数据流输出数据速率增加导致,则 Amazon Kinesis 应用程序将重试并最终完成请求。如果这是由持续的数据流输出数据速率增加导致的,则应增加数据流内的分区数量,从而为读取数据调用提供持续成功所需的足够容量。在这两种情况下,Amazon CloudWatch 指标都可让您了解数据流输出数据速率的变化,以及 ProvisionedThroughputExceeded 异常的出现。
延长数据留存和长期数据留存
Kinesis Data Streams 支持的保留期是多长?
24 小时的默认保留期涵盖了处理中的间歇性延迟需要赶上实时数据的情况。7 天的保留允许您在长达 7 天的时间里重新处理数据,解决潜在的下游数据丢失问题。长期数据留存期超过 7 天,最长 365 天,允许您重新处理旧数据,以用于算法回测、数据存储回填和审核等应用场景。
是否可以使用现有的 Kinesis Data Streams API 来读取超过七天的数据?
可以。您可以使用相同的 getShardIterator、GetRecords 和 SubscribeToShard API 来读取保留超过 7 天的数据。使用者可以将迭代器移动到流中所需的位置,检索分区映射(包括打开和关闭的映射),并读取记录。
问:是否有任何新的 API 能够进一步辅助读取旧数据?
可以。ListShards、GetRecords 和 SubscribeToShard API 有相关的 API 增强功能。您可以使用 ListShards API 中带有 TimeStamp 参数的新筛选选项来有效检索分区映射,并改善读取旧数据的性能。TimeStamp 筛选条件使应用程序能够从您希望重新处理数据的时间点发现和枚举分区,并消除了从 trim 地平线开始的需要。GetRecords 和 SubscribeToShards 具有新字段 — ChildShards ,允许您在应用程序完成从一个关闭的分区中读取数据时快速发现子分区,而不必再次遍历分区映射。对分区的快速发现,能够针对任意大小的流有效地使用应用程序的计算资源,而无需考虑数据保留时间。
问:何时使用 API 增强功能?
如果您计划保留数据较长时间并定期扩展您的流容量,那么您应考虑使用这些 API 增强功能。流扩展操作将关闭现有的分区并打开新的子分区。在所有打开和关闭分区中的数据都将保留直至保留期结束。因此,分区总数将随着较长的保留期和多个扩展操作而线性增加。分区映射的增加,要求您使用带有 TimeStamp 筛选条件的 ListShards、GetRecords 中的 ChildShards 字段以及 SubscribeToShard API,以便在数据检索时有效地发现分区。针对这些功能,标准使用者需要将 KCL 升级至最新版本 1.x,而增强型扇出使用者需要升级至 2.x。
问:Kinesis Data Streams 是否支持 Schema 注册?
可以。Kinesis Data Streams 的客户可以通过 KPL 和 KCL 或者 AWS Java SDK 中的 AWS Glue Schema Registry API 使用 AWS Glue Schema Registry(AWS Glue 的一种无服务器功能)。Schema Registry 不需要额外付费即可使用。
访问 Schema Registry 用户文档开始使用并了解更多信息。
管理 Kinesis Data Streams
问:预置模式下,如何更改 Amazon Kinesis 数据流的吞吐量?
有两种方法可以更改数据流的吞吐量。您可以使用 UpdateShardCount API 或 AWS 管理控制台来扩展数据流中的分区数量,也可以通过调整数据流中的分区数量(重新分区)来更改 Amazon Kinesis 数据流的吞吐量。
问:使用 UpdateShardCount 或 AWS 管理控制台更改预置模式下运行的 Amazon Kinesis 数据流的吞吐量需要多长时间?
一般的扩展请求只需几分钟时间即可完成。较大的扩展请求需要的时间要长于较小的请求。
问:当我在预置模式下更改 Kinesis Data Streams 的吞吐量,或者在按需模式下自动进行扩展时,Kinesis Data Streams 是否仍然可用?
可以。在使用 UpdateShardCount 或重新分区更改数据流的吞吐量时,或当 Kinesis Data Streams 在按需模式下自动更改时,您可以继续向 Kinesis Data Streams 添加数据并从中读取数据。
问:如何监控 Amazon Kinesis 数据流的运行和性能?
Amazon Kinesis Data Streams 管理控制台会显示关键运营和性能指标,如 Kinesis Data Streams 的数据输入和输出的吞吐量。Kinesis Data Streams 还与 Amazon CloudWatch 集成,以便您可以为数据流及其中的分片收集、查看和分析 CloudWatch 指标。有关 Kinesis Data Streams 指标的更多信息,请参阅利用 Amazon CloudWatch 监控 Amazon Kinesis Data Streams 服务。
注意,所有流级别的指标都是免费的。所有已启用的分片级别的指标均根据 Amazon CloudWatch 定价进行收费。
问:如何管理和控制对 Amazon Kinesis 数据流的访问权限?
Kinesis Data Streams 与 AWS Identity and Access Management(IAM)服务集成,后者有助于您安全控制对 AWS 产品和用户资源的访问权限。例如,您可以创建仅允许特定用户或组向数据流添加数据的策略。您还可以将基于资源的策略附加到数据流或注册的使用者,以控制资源级别的访问。有关数据流访问管理和控制的更多信息,请参阅使用 IAM 控制对 Amazon Kinesis Data Streams 资源的访问。
问:如何与其他账户共享对我的数据流的访问权限?
您可以使用 IAM 代入角色或基于资源的策略与其他账户共享访问权限。要与跨账户 AWS Lambda 函数共享访问权限,请将基于资源的策略附加到您的数据流或使用者,以授予对 Lambda 函数执行角色的访问权限。 更多详情请参阅将 AWS Lambda 与 Amazon Kinesis 结合使用。
问:如何记录针对 Amazon Kinesis 数据流的 API 调用,以便用于安全分析和运行故障排除?
Kinesis Data Streams 与 Amazon CloudTrail 集成,后者是记录您账户的 AWS API 调用并向您提供日志文件的服务。有关 API 调用日志的更多信息和支持的 Amazon Kinesis API 操作的列表,请参阅使用 Amazon CloudTrail 记录 Amazon Kinesis API 调用。
问:如何高效管理 Amazon Kinesis Data Streams 以及相关成本?
使用 Kinesis Data Streams,您能够标记 Kinesis Data Streams,从而更加轻松地管理资源和成本。标签是以键-值对表示的用户定义的标记,帮助组织 AWS 资源。例如,您可以使用成本中心标记流,从而基于成本中心分类和跟踪 Kinesis Data Streams。有关 Amazon Kinesis Data Streams 标签的更多信息,请参阅标记您的 Amazon Kinesis Data Streams。
安全性
问:使用 Kinesis Data Streams 时,数据的安全性如何?
Amazon Kinesis 在原定设置下是安全的。仅账户和数据流所有者才有权访问自己创建的 Kinesis 资源。Kinesis 支持用户身份验证,以控制对数据的访问。您可以使用 IAM 策略选择性地向用户和用户组授予权限。您可以使用 HTTPS 协议通过 SSL 端点安全地向 Kinesis 放入数据和从中获取数据。如果您需要额外的安全性,可使用服务器端加密和 AWS Key Management Service(AWS KMS)密钥对存储在数据流中的数据进行加密。AWS KMS 允许您使用 AWS 生成的 KMS 密钥进行加密,或者您也可以选择将自己的 KMS 密钥添加到 AWS KMS。最后,您还可以使用自己的加密库在客户端上加密要放入 Kinesis 的数据。
问:我可以在不使用公用 IP 的情况下,从 Amazon Virtual Private Cloud(Amazon VPC)对 Kinesis Data Streams API 进行私有访问吗?
可以。通过创建 VPC 终端节点,您可以从 Amazon VPC 对 Kinesis Data Streams API 进行私有访问。借助 VPC 终端节点,VPC 和 Kinesis Data Streams 之间的路由可由 AWS 网络处理,而无需使用 Internet 网关、NAT 网关或 VPN 连接。Kinesis Data Streams 使用的最新一代 VPC 终端节点由 AWS PrivateLink 提供支持。AWS PrivateLink 是一种通过使用 VPC 中带有私有 IP 的弹性网络接口(ENI)来支持各 AWS 服务之间的私有连接的技术。要了解有关 PrivateLink 的更多信息,请访问 PrivateLink 文档。
加密
问:能否加密输入 Kinesis 数据流的数据?
可以。有两个选项可以这样做。您可以使用服务器端加密(一项完全托管的功能),该功能会在您向数据流输入数据和从中提取数据时自动对数据进行加密和解密。或者,您也可以通过在客户端上进行加密和解密,向数据流写入加密数据。
问:为何应使用服务器端加密而非客户端加密?
出于以下任一原因,您可能会选择服务器端加密而非客户端加密:
- 很难执行客户端加密。
- 他们希望在客户端加密之上再增加一层安全保障。
- 很难实施客户端密钥管理方案。
问:什么是服务器端加密?
适用于 Kinesis Data Streams 的服务器端加密会使用用户指定的 AWS KMS 密钥在数据写入数据流存储层之前自动加密,并在数据从存储中检索后进行解密。加密使得写入操作无法执行且无法读取负载和分区键,除非向数据流写入或从中读取数据的用户有权限使用所选密钥在数据流上进行加密。因此,使用服务器端加密更易达到内部针对监管数据的安全性和合规性要求。
借助服务器端加密,客户端应用程序(创建器和使用器)无需获知加密,也无需管理 KMS 密钥或加密操作,并且 Kinesis Data Streams 服务内的静态和动态数据都会得到加密。服务器端加密功能使用的所有 KMS 密钥均由 AWS KMS 提供。AWS KMS 让您可以轻松使用适用于 Kinesis 的 AWS 托管式 KMS 密钥(一种“一键式”加密方法)、您自己的 AWS KMS 客户托管式密钥或您为进行加密而导入的 KMS 密钥。
问:是否有服务器端加密入门指南?
有。用户文档中提供了入门指南。
问:服务器端加密是否会干扰应用程序与 Kinesis Data Streams 的交互方式?
可能会。这取决于您用于加密的密钥和监管密钥访问的权限。
- 如果您使用适用于 Kinesis 的 AWS 托管式 KMS 密钥(密钥别名 = aws/kinesis),则借助此密钥启用或禁用加密不会影响您的应用程序。
- 如果您使用其他 KMS 密钥(如自定义的 AWS KMS 密钥或您导入 AWS KMS 服务的主密钥),且数据流的创建器和使用器没有权限使用加密所用的 KMS 密钥,那么 PUT 和 GET 请求将会失败。要使用服务器端加密,您必须先配置 AWS KMS 密钥策略以允许加密和解密消息。要了解相关示例和有关 AWS KMS 权限的更多信息,请参阅 AWS Key Management Service 开发人员指南中的“AWS KMS API 权限:操作和资源参考”或 Kinesis Data Streams 服务器端加密用户文档中的权限指南。
问:使用服务器端加密是否会额外产生相关成本?
会。但如果您使用的是适用于 Kinesis 的 AWS 托管式 KMS 密钥,并且 KMS API 使用成本没有超出免费套餐,则使用服务器端加密免费。下面按资源介绍了成本:
密钥:
适用于 Kinesis 的 AWS 托管式 KMS 密钥(别名 = “aws/kinesis”)是免费的。
客户托管式 KMS 密钥会产生 KMS 密钥成本。了解详情。
KMS API 使用情况:
会对每个 KMS 密钥(包括自定义密钥)收取 API 使用成本。轮换数据密钥时,Kinesis Data Streams 大约每 5 分钟调用一次 KMS。在 30 天的月份中,由 Kinesis 数据流发起的 KMS API 调用的总成本应该不超过几美元。注意,此费用将因您在数据创建器和使用器上使用的用户证书数量而异,因为每个用户证书需要对 AWS KMS 进行唯一的 API 调用。当您使用 IAM 角色进行身份验证时,每个 assume-role-call 都将生成唯一的用户证书,并且您可能希望缓存由 assume-role-call 返回的用户证书,从而节省 KMS 成本。
问:哪些 AWS 区域提供适用于 Kinesis Data Streams 的服务器端加密?
Kinesis Data Streams 服务器端加密已在 AWS GovCloud 区域和中国(北京)区域外的所有公共区域推出。
问:如何从数据流中启动、更新或移除服务器端加密?
所有这些操作均可通过 AWS 管理控制台或使用 AWS 开发工具包完成。要了解更多信息,请参阅 Kinesis Data Streams 服务器端加密入门指南。
问:服务器端加密使用何种加密算法?
Kinesis Data Streams 使用 AES-GCM 256 算法进行加密。
问:如果加密了已写入数据(纯文本或密文格式)的数据流,那么在更新加密时,是否会加密或解密该数据流中的所有数据?
不会,应用新加密只会加密(或解密)写入该数据流的新数据。
问:适用于 Kinesis Data Streams 的服务器端加密会加密哪些内容?
服务器端加密会加密消息的负载以及数据流创建器应用程序指定的分区键。
问:服务器端加密是一项特定于分区的功能还是特定于数据流的功能?
服务器端加密是一项特定于数据流式传输的功能。
问:能否更改用于加密特定数据流的 KMS 密钥?
能。使用 AWS 管理控制台或 AWS 开发工具包即可选择将新的 KMS 密钥应用到特定数据流。
问:AWS Free Tier 中是否提供 Kinesis Data Streams?
不提供。Kinesis Data Streams 当前不在 AWS Free Tier 中提供。AWS
免费套餐是一项提供了免费试用一系列 AWS 服务的计划。有关
AWS 免费套餐的更多详细信息,请参阅 AWS 免费套餐。
服务水平协议
问:Kinesis Data Streams SLA 提供什么保障?
我们的 Kinesis Data Streams SLA 保证 Kinesis Data Streams 的月度正常运行时间百分比至少达到 99.9%。
问:怎样确定我是否有资格获得 SLA 服务抵扣?
对于您运行任务所在的可用区,如果同一个区域内有一个以上的可用区在任何月度账单周期内的月度正常运行时间百分比没有达到 99.9%,那么您就有资格获得 Kinesis Data Streams SLA 规定的 Kinesis Data Streams 服务抵扣。
如需 SLA 的所有条款与条件的完整详细信息,以及如何提交索赔的详细信息,请参阅 Amazon Kinesis Data Streams SLA。
定价与计费
问:Kinesis Data Streams 如何定价?
Kinesis Data Streams 使用简单的即用即付定价模式。没有预付费用或最低费用,并且您仅需为使用的资源付费。Kinesis Data Streams 有两种按需和预置的容量模式,都带有特定的计费选项。
问:按需模式下,Kinesis Data Streams 如何定价?
在按需容量模式下,您无需指定希望应用程序执行的读写吞吐量。在这种模式下,定价基于摄取和检索的数据量以及您帐户中每个数据流的每小时费用。可选功能有额外的费用:延长数据保留时间(超过前24小时,在前7天内)、长期数据保留时间(7天以上,最多一年),以及增强型扇出。有关 Kinesis Data Streams 费用的更多信息,请参阅 Amazon Kinesis Data Streams 定价。
问:预置模式下,Kinesis Data Streams 如何定价?
使用配置容量模式,可以根据应用程序的写入和读取请求速率指定应用程序所需的分区数。分区是一种容量单位,可提供 1 MB/秒的写入和 2 MB/秒的读取。您可以按小时对每个分区付费。您还需要为写入 Kinesis 数据流的记录付费。当您使用可选功能(如延长保留期和增强型扇出)时,会产生额外费用。
Amazon Kinesis Data Streams 预置模式的费用有两个核心维度和三个可选维度:
- 每小时分片费用由您的 Amazon Kinesis 数据流内的分片数量决定。
- PUT Payload Unit 收费根据数据创建器添加到您的数据流的 25KB 负载单元的数量决定。
可选:
- 延长数据保留期属于一项可选的费用,由您的数据流产生的分区小时数决定。启用延长数据保留期后,您需要为流中的每个分区支付延长保留期费率。
- 长期数据保留的费用属于可选成本,具有两个成本维度:长期数据存储和长期数据检索。长期数据存储反映了在超过 7 天和长达 365 天的期间内所存储的每月每 GB 数据量。长期数据检索反映了存储超过 7 天的检索的数据 GB 量。
- 增强型扇出功能的费用属于可选成本,具有两个成本维度:使用者分区小时和数据检索。使用者分区小时的计算方式是流中的分区数乘以使用增强型扇出功能的使用者数量。数据检索量取决于使用增强型扇出功能传递给使用者的 GB 数。
有关 Kinesis Data Streams 费用的更多信息,请参阅 Amazon Kinesis Data Streams 定价。
问:在预置模式下,如何为增强型扇出功能计算使用者分区时间?
使用者分区小时的计算方式是:将已注册的流使用者数量乘以流中的分区数量。您只需要按比例为已注册使用增强型扇出功能的使用者实际使用的小时数付费。例如,如果使用者分区小时成本为 0.015 USD,对于 10 个分区数据流,这个使用增强型扇出功能的使用者可以从 10 个分区中读取数据,因此产生每小时 0.15 USD 的使用者分区小时费用(1 个使用者 x 10 个分区 x 0.015 USD 的每使用者分区小时费用)。如果有两个使用者同时注册了增强型扇出功能,则每小时的使用者分区小时总费用是每小时 0.30 USD(2 个使用者 x 10 个分区 x 0.015 USD)。
与其他 AWS 服务对比
问:何时应使用 Kinesis Data Streams,何时应使用 Amazon Managed Streaming for Apache Kafka(Amazon MSK)?
Kinesis Data Streams 和 Amazon MSK 都是流行的数据流平台,可帮助您构建自己的流工作负载来处理数据以满足特殊需求。这两种服务都具有可扩展性、安全性和高可用性。它们都可以部署来运行流媒体用例,例如实时 Web 和日志分析、个性化客户体验、事件驱动型架构、物联网分析和实时欺诈检测。在两者之间进行选择时,请务必考虑您的具体应用场景和要求。以下是需要考虑的一些因素:
熟悉程度
- 如果您不熟悉流技术,请使用 Kinesis Data Streams。
- 如果您有在 Apache Kafka 上运行的现有应用程序,请使用 MSK。MSK 已经有一套 Kafka 迁移程序(KMP)和迁移指南,可简化迁移体验。
倾向于开源
- 如果您更倾向于使用开源技术,建议您使用 MSK。MSK 和 MSK Connect 分别与开源 Apache Kafka 和 Kafka Connect 完全兼容。
问:Kinesis Data Streams 与 Amazon SQS 有何区别?
Kinesis Data Streams 允许实时处理大数据流。它提供了记录排序,以及以使用与多个 Amazon Kinesis 应用程序相同的顺序读取和/或重播数据记录的能力。Amazon Kinesis Client Library(KCL)能够将给定分区键的所有记录提供给同一记录处理器,从而能够更加轻松地构建从同一 Kinesis 数据流读取数据的多个应用程序(例如,执行计数、累积和筛选)。Amazon Simple Queue Service(Amazon SQS)提供可靠且高度可扩展的托管队列,用于在消息在计算机之间传输时存储消息。Amazon SQS 让您能够在分布式应用程序组件之间轻松移动数据,并帮助构建可以单独处理消息的应用程序(带消息级确认/失败语义),如自动工作流。
问:何时应该使用 Kinesis Data Streams,何时应该使用 Amazon SQS?
我们建议将 Amazon Kinesis Data Streams 用于具有类似以下要求的使用案例:
- 将相关记录路由到同一记录处理器(如同流处理 MapReduce)。 例如,当给定键的所有记录被传输到同一记录处理器时,计数和累积更加简单。
- 记录的排序。 例如,您希望将日志数据从应用程序主机传输到处理/归档主机,同时保持日志报表的顺序。
- 多个应用程序并发使用同一数据流的能力。 例如,您拥有的一个应用程序会更新实时仪表板,另一个应用程序会归档数据到 Amazon Redshift。您希望这两个应用程序并行独立地使用同一数据流的数据。
- 在数小时后以同一顺序使用记录的能力。 例如,您拥有一个记账应用程序,同时审计应用程序在开单应用程序数小时后运行。由于 Kinesis Data Streams 最多存储数据 365 天,因此您可在记账应用程序运行后的最长 365 天内运行审计应用程序。
我们建议将 Amazon SQS 用于具有类似以下要求的使用案例:
- 消息收发语义(如消息级别确认/失败)和可见性超时。 例如,您拥有一个工作项目队列,同时希望单独跟踪每个项目的成功完成情况。Amazon SQS 跟踪确认/失败,因此应用程序无需保留持续的检查点/光标。在配置的可见性超时后,Amazon SQS 将删除已确认消息并重新提交失败的消息。
- 单个消息延迟。 例如,您拥有一个作业队列,同时需要计划带延迟的单个作业。通过 Amazon SQS,您可为某些消息单独配置最多 15 分钟的延迟。
- 动态增加读取时间的并发性/吞吐量。 例如,您拥有一个工作队列,同时希望添加更多读者,直到储备清除。通过 Kinesis Data Streams,您可以扩展到足够数量的分区(但请注意,您需要提前预置足够的分区)。
- 利用 Amazon SQS 的透明扩展功能。 例如,由于业务的偶尔负载尖峰或自然增长,您将缓存请求和负载变化。由于每个缓存的请求可以单独处理,因此 Amazon SQS 可以透明扩展以处理负载,无需提供任何预置说明。