一般性问题

问:什么是 Amazon Kinesis Data Streams?

Amazon Kinesis Data Streams 是一种完全托管的流数据服务。您可以将来自成千上万个来源的各类数据(如点击流、应用程序日志和社交媒体)连续添加到 Kinesis 流中。只需数秒,您的 Kinesis 应用程序即可读取并处理流中的数据。

问:Amazon Kinesis Data Streams 能够以我的名义管理哪些内容?

Amazon Kinesis Data Streams 可管理在数据吞吐量层面流式处理您的数据所需的基础设施、存储、网络和配置。对于数据流,您不必为预置、部署、软硬件日常维护或其他服务费心。此外,Amazon Kinesis Data Streams 还可以跨 亚马逊云科技 区域中的三个设施同步复制数据,从而提供高可用性和数据持久性。

问:Amazon Kinesis Data Streams 有什么用途?

Amazon Kinesis Data Streams 可用于从数据创建器快速移出数据,然后持续处理数据。这是因为,它可以在将数据发送到数据存储之前先转换数据、实时提取指标和进行分析,也可以派生更复杂的数据流以供进一步处理。下面介绍了 Amazon Kinesis Data Streams 的典型使用情景:

  • 加速引入日志和数据源:您可以将数据创建器设为在数据生成后立即将数据推送到 Kinesis 流中,无需等待批量处理数据,从而防止因数据创建器出现故障而导致数据丢失。例如,系统和应用程序日志可以连续添加到流中,并能在数秒内得到处理。
  • 实时指标和报告:您可以从 Kinesis 流数据中实时提取指标并生成报告。例如,您的 Kinesis 应用程序可以在数据流入时处理系统和应用程序日志的指标和报告,而无需等待接收批量数据。
  • 实时数据分析:借助 Amazon Kinesis Data Streams,您可以进行实时流数据分析。例如,您可以将点击流添加到 Kinesis 流中,并将 Kinesis 应用程序设为实时进行分析,这样您就可以在数分钟(而不是数小时或数日)内获得数据解析。
  • 复杂的流处理:您可以创建 Kinesis 应用程序和数据流的有向无环图 (DAG)。在此情景中,一个或多个 Kinesis 应用程序可将数据添加到另一个 Kinesis 流中,以供进一步处理,从而形成流处理的后续阶段。

问:如何使用 Kinesis Streams?

注册 Amazon Web Services 后,您便可通过以下方式开始使用 Kinesis Streams:

问:Kinesis Streams 有哪些限制?

通过增加流内分片的数量,可以无限扩展 Kinesis 流的吞吐量。然而,在使用 Amazon Kinesis Data Streams 时,您应注意下面这些限制:

  • 默认情况下,流中的记录最多可使用 24 小时,并且自添加到流中之后记录最多可选择使用 365 天。
  • 一个记录内的数据 Blob 的大小上限(Base64 编码前的数据负载)为 1MB。
  • 每个分片每秒最多可支持 1000 个 PUT 记录。

有关其他 API 等级限制的更多信息,请参阅 Kinesis Data Streams 限制

问:Amazon Kinesis Data Streams 与 Amazon SQS 有何区别?

Amazon Kinesis Data Streams 支持实时处理大数据流。它提供记录排序功能,以及按多个 Kinesis 应用程序的顺序读取和/或重放记录的功能。Kinesis Client Library (KCL) 能够将给定分区键的所有记录都提供给同一记录处理器,这样就可以更轻松地构建从同一 Kinesis 流读取数据的多个应用程序(例如,用于执行计数、汇总和筛选)。

Amazon Simple Queue Service (Amazon SQS) 提供了可靠且高度可扩展的托管队列,当消息在计算机之间传输时它可用于存储消息。借助 Amazon SQS,您可以在分布式应用程序组件之间轻松移动数据,并构建单独处理消息的应用程序(带消息级确认/失败语义),如自动工作流。

问:Amazon Kinesis Data Streams 和 Amazon SQS 分别适用于哪些情况?

我们建议您对具有以下类似需求的使用案例使用 Amazon Kinesis Data Streams:

  • 将相关记录路由到同一记录处理器(如同流式处理 MapReduce)。例如,当给定键的所有记录都被路由到同一记录处理器时,计数和汇总将更加简单。
  • 记录排序。例如,您希望将日志数据从应用程序主机传输到处理/归档主机,同时保持日志报表的顺序不变。
  • 多个应用程序能够同时使用同一个流。例如,您让一个应用程序更新实时控制面板,并让另一个应用程序存档数据。您希望这两个应用程序分别同时使用同一个流中的数据。
  • 在数小时后能够以同一顺序使用记录。例如,您拥有一个账单应用程序,而审计应用程序晚账单应用程序数小时运行。由于 Amazon Kinesis Data Streams 最多可以存储数据 365 天,因此在账单应用程序运行之后,您最多可以运行审计应用程序 365 天。

我们建议您对具有以下类似需求的使用案例使用 Amazon SQS:

  • 消息收发语义(如消息级确认/失败)和可见性超时。例如,您拥有一个工作项目队列,同时希望单独跟踪每个项目的成功完成情况。Amazon SQS 跟踪确认/失败情况,因此应用程序无需保留持续的检查点/光标。在配置的可见性超时后,Amazon SQS 会删除已确认的消息,并重新提交失败的消息。
  • 单个消息延迟。例如,您拥有一个作业队列,同时需要安排带延迟的各个作业。借助 Amazon SQS,您可以将各个消息配置为具有最多 15 分钟的延迟。
  • 动态增加读取时间的并发性/吞吐量。例如,您拥有一个工作队列,同时希望添加更多阅读器,直到储备清除。借助 Amazon Kinesis Data Streams,您可以扩展到足够数量的分片(但请注意,您需要提前预置足够的分片)。
  • 充分利用 Amazon SQS 的透明扩展功能。例如,由于业务的偶尔负载尖峰或自然增长,您会缓存请求和负载变化。由于每个缓存的请求可以单独处理,因此 Amazon SQS 可以透明扩展以处理负载,无需提供任何预置说明。

重要的 Amazon Kinesis Data Streams 概念

问:什么是分片?

分片是 Kinesis 流的基本吞吐量单位。一个分片的吞吐量为每秒输入 1MB 数据和每秒输出 2MB 数据,并且每秒最多可支持 1000 个 PUT 记录。您需要在创建流时指定所需的分片数量。例如,您可以创建具有两个分片的流。此流的吞吐量为每秒输入 2MB 数据和每秒输出 4MB 数据,并且每秒最多支持 2000 个 PUT 记录。 通过重新分片,您可以根据数据吞吐量的变化,在流中动态添加分片或从中移除分片。

问:什么是记录?

记录是存储在 Kinesis 流中的数据单元。记录由序列号分区键和数据 Blob 组成。数据 Blob 是数据创建器向流中添加的相关数据。数据 Blob 的最大大小(Base64 编码前的数据负载)为 1MB。

问:什么是分区键?

分区键用于分离出记录,并将其路由到流的不同分片。分区键由您的数据创建器在向 Kinesis 流时指定。例如,假定您的流具有两个分片(分片 1 和分片 2)。您可以将数据创建器配置为使用两个分区键(键 A 和键 B),以便将所有带键 A 的记录添加到分片 1 中,并将所有带键 B 的记录添加到分片 2 中。 

问:什么是序列号?

序列号是各个记录的唯一标识符。当数据创建器调用 PutRecordPutRecords 操作向 Kinesis 流添加数据时,Amazon Kinesis Data Streams 会分配序列号。同一分区键对应的序列号通常会随着时间的推移而逐渐增加;PutRecordPutRecords 请求之间的间隔时间越长,序列号就会越大。

创建 Amazon Kinesis 数据流

问:如何创建 Amazon Kinesis 流?

注册 Amazon Web Services 后,您可以通过 Amazon Kinesis Data Streams 管理控制台CreateStream 操作来创建 Amazon Kinesis 流。

问:如何确定我的 Kinesis 流的吞吐量?

Kinesis 流的吞吐量取决于流内的分片数量。请按照下列步骤操作,估计流需要的初始分片数量。请注意,通过重新分片功能,您可以动态调整流内的分片数量。

  • 估计写入流的记录的平均大小,以 KB 为单位,四舍五入为最接近的 1KB。(average_data_size_in_KB)
  • 估计每秒写入流的记录数量。(number_of_records_per_second)
  • 确定分别同时使用流数据的 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):

number_of_shards = max (incoming_write_bandwidth_in_KB/1000, outgoing_read_bandwidth_in_KB/2000)

问:我可为 Kinesis 流请求的最小吞吐量是多少?

Kinesis 流的吞吐量以分片为单位扩展。一个分片是流的最小吞吐量,即每秒输入的数据为 1MB,每秒输出的数据为 2MB。

问:我可为 Kinesis 流请求的最大吞吐量是多少?

Amazon Kinesis 数据流的吞吐量可无限扩展。以下 亚马逊云科技 区域的默认分片配额为每个流 500 个分片:美国东部(弗吉尼亚北部)、美国西部(俄勒冈)和欧洲(爱尔兰)。对于所有其他 亚马逊云科技 区域,包括由光环新网运营的 亚马逊云科技 中国(北京)区域以及由 NWCD 运营的 亚马逊云科技 中国(宁夏)区域,默认分片配额为每个流 200 个分片。您可以通过 亚马逊云科技 Service Quotas 控制台请求增加分片配额。

问:记录大小会对我的 Kinesis 流的吞吐量造成什么影响?

分片提供 1MB/秒的数据输入速率,同时每秒最多支持 1000 个 PUT 记录。因此,如果记录大小不到 1KB,则分片的实际数据输入速率将小于 1MB/秒,受每秒 PUT 记录数上限的限制。

向 Amazon Kinesis 数据流添加数据

问:如何向我的 Kinesis 流添加数据?

您可以通过 PutRecordPutRecords 操作或 Kinesis Producer Library (KPL) 将数据添加到 Kinesis 流中。

问:PutRecordPutRecords 之间有何区别?

PutRecord 操作可以在一次 API 调用中添加一个数据记录,而 PutRecords 操作则可以在一次 API 调用中添加多个数据记录。有关 PutRecordPutRecords 操作的更多信息,请参阅 PutRecord PutRecords

问:Kinesis Producer Library (KPL) 是什么?

Kinesis Producer Library (KPL) 是一种易于使用且高度可配置的库,可以帮助您向 Kinesis 流中添加数据。KPL 具有简单可靠的异步接口,让您可以快速实现非常高的创建器吞吐量,同时最大限度地减少客户端资源的使用。

问:我可以使用哪些编程语言或平台访问 Amazon Kinesis Data Streams API?

Amazon Web Services 软件开发工具包中包含 Amazon Kinesis Data Streams API。要查看适用于 Amazon Web Services 软件开发工具包的编程语言或平台列表,请参阅适用于 Amazon Web Services 的工具

问:Kinesis Producer Library (KPL) 采用什么编程语言?

Kinesis Producer Library (KPL) 的核心是采用 C++ 模块构建的,并可以使用最新的 C++ 编译器将其编译为在任意平台上运行。此库目前采用 Java 接口。我们期待添加对其他编程语言的支持。

问:如果数据创建器向流中添加数据时超出 Kinesis 流的容量限制,会怎么样?

Kinesis 流的容量限制由流内的分片数量确定。数据吞吐量或 PUT 记录数量可能会导致超出容量限制。超过容量限制后,输入数据调用将以 ProvisionedThroughputExceeded 例外被拒绝。如果这是因流的输入数据速率的临时增加所致,则使用数据创建器重试会最终完成请求。如果这是因流的输入数据速率的持续增加所致,则应增加流内的分片数量,从而为输入数据调用提供持续成功所需的足够容量。在这两种情况下,您都可以通过 Amazon CloudWatch 指标了解数据流输入数据速率的变化,以及 ProvisionedThroughputExceeded 例外的出现。

问:在 PutRecordPutRecords 调用期间,哪些数据会计入 Kinesis 流的数据吞吐量?

数据 Blob分区键和流名称是 PutRecordPutRecords 调用的必要参数。数据 Blob (进行 Base64 编码之前)和分区键的大小将计入 Kinesis 流的数据吞吐量(由流内的分片数量确定)。

延期和长期数据保留

问:如何选择数据流的保留期限?

24 小时的默认保留期限包括以下情况:处理过程中出现间歇性滞后,需要与实时数据同步。7 天的保留期限使您能够对7 天(最多)的数据进行再次处理,以解决潜在的下游数据丢失问题。超过 7 天、最多 365 天的长期数据保留期限,可以使您对使用案例中的旧数据进行再次处理,如算法回测、数据存储回填和审计。

问:我能否通过现有的 KDS API 读取保留 7 天以上的数据?

可以。您可以使用相同的 getShardIterator、GetRecords 和 SubscribeToShard API 读取保留 7 天以上的数据。使用者可以将迭代器移至数据流中所需的位置,检索分片图(包括已打开和已关闭分片)并读取记录。

问:延长数据保留的计费是如何进行的?

启用将数据保留期限最多延长 7 天后,您需要按照额外费率针对数据流产生的每个分片时间付费。

问:长期数据保留的计费是如何进行的?

对于保留超过 7 天的数据,您需要支付较低的每月 GB 费率,该费率是按存储的每字节数据计算的。您需要支付前 7 天的延长数据保留费用。没有负载取整或存储量最小值限制。如果您启用了服务器端加密,那么在计算长期数据存储费用时,每个客户负载量都将会增加额外 41 个字节的加密负载量。

问:长期数据检索的计费是如何进行的?

对于保留超过 7 天的数据,您需要支付较低的每 GB 费率,这是对标准使用者使用 GetRecords API 检索每字节数据计量的费率。没有负载取整或传输最小值限制。检索存储少于 7 天的数据无需付费。

增强型扇出

问:什么是增强型扇出?

增强型扇出是 Amazon Kinesis Data Streams 使用者的一项可选功能,可在使用者和分片之间提供 2MB/秒的逻辑吞吐量管道。此功能允许客户在维护高性能的同时,并行扩展从数据流读取的使用者数量。

问:使用者如何使用增强型扇出?

使用者必须首先使用 Amazon Kinesis Data Streams 服务自行注册。默认情况下,使用者注册会激活增强型扇出。如果您使用的是 KCL,则 KCL 版本 2.x 将自动处理使用者注册,并使用 KCL 应用程序的名称作为使用者名称。注册后,所有已注册使用者都将拥有自己的预置逻辑增强型扇出吞吐量管道。然后,使用者使用 HTTP/2 SubscribeToShard API 检索这些吞吐量管道内部的数据。HTTP/1 GetRecords API 目前不支持增强型扇出,因此您需要升级至 KCL 2.x,或者也可以注册您的使用者,然后由其调用 SubscribeToShard API。

问:使用者如何利用增强型扇出?

使用者通过使用 SubscribeToShard API 检索数据来利用增强型扇出。在 SubscribeToShard API 内使用已注册使用者的名称,即可利用为其提供的增强型扇出优势。

问:何时应使用增强型扇出?

如果您正在或将会让多个使用者从流中并行检索数据,或者如果您至少有一个使用者需要使用 SubscribeToShard API 以低于 200 毫秒的速度在生产者和使用者之间传递数据,则应使用增强型扇出。

问:是否可以让一些使用者使用增强型扇出,而其他使用者不使用?

是的,您可以让多个使用者使用增强型扇出,而同时其他使用者不使用增强型扇出。使用增强型扇出不会影响传统 GetRecords 使用的分片限制。

问:对于某个给定的流,使用增强型扇出的使用者数量是否有限制?

每个数据流使用增强型扇出的默认限制为 5 个使用者。如果您需要的数量超过 5 个,请通过 亚马逊云科技 Support 提交限制增加请求。请记住,通过让 5 个使用者使用增强型扇出,而同时其他使用者不使用增强型扇出,您可以让总数超过 5 个的使用者从一个流中读取数据。

问:使用者如何注册以使用增强型扇出和 HTTP/2 SubscribeToShard API?

我们建议使用 KCL 2.x,它将自动注册您的使用者,并且可以使用增强型扇出和 HTTP/2 SubscribeToShard API。此外,您也可以使用 RegisterStreamConsumer API 手动注册使用者,然后用您注册的使用者名称来使用 SubscribeToShard API。

问:使用增强型扇出是否会产生相关费用?

是的,除了用于检索每 GB 数据的检索费用之外,对于流中的每个分片组合以及注册使用增强型扇出的使用者(使用者分片小时)都会产生按需每小时费用。有关更多详细信息,请参阅 Amazon Kinesis Data Streams 定价页面

问:使用者分片小时是如何计算的?

使用者分片小时是通过将注册的流使用者的数量乘以流中分片的数量计算得出的。例如,如果一个使用者分片小时的费用为 ¥ 0.1211,对于一个含有 10 个分片的数据流,此使用增强型扇出的使用者将能够从 10 个分片中读取数据,从而产生每小时 ¥ 1.211 的使用者分片小时费用(1 个使用者 × 10 个分片 × ¥ 0.1211/使用者分片小时)。如果有两个使用者同时注册了增强型扇出,则每小时的使用者分片小时总费用将为 ¥ 0.2422(2 个使用者 × 10 个分片 × ¥ 0.1211)。

问:如果我在一个小时内终止或启动一个使用者,则增强型扇出的使用者分片小时计费是否自动按比例分配?

是的,您将仅支付注册使用增强型扇出的使用者的该小时的按比例分配部分的费用。

问:增强型扇出数据检索的计费是如何进行的?

您支付较低的每 GB 费率,这是使用增强型扇出的使用者检索每字节数据的计量费率。没有负载取整或传输最小值限制。对于增强型扇出的使用者,长期数据检索无需额外付费。

问:我是否需要更改创建器或数据流来使用增强型扇出?

不需要,可以在不影响数据创建器或数据流的情况下激活增强型扇出。

读取和处理 Amazon Kinesis 数据流中的数据

问:什么是 Kinesis 应用程序?

Kinesis 应用程序是一种能读取和处理 Kinesis 流中数据的数据使用者。您可以使用 Kinesis Data Streams APIKinesis Client Library (KCL) 构建应用程序。

问:Kinesis Client Library (KCL) 是什么?

适用于 Java | Python | Ruby | Node.js | .NET 的 Kinesis Client Library (KCL) 是一种预建库,可帮助您轻松构建 Kinesis 应用程序,用于读取和处理 Kinesis 流中的数据。KCL 可以处理各种复杂问题,如适应流量的变化、均衡流数据负载、协调分布式服务和以容错方式处理数据,从而使您能够在构建应用程序的同时专注业务逻辑。

问:Kinesis Connector Library 是什么?

Kinesis Connector Library 是一个预建库,可帮助您轻松将 Kinesis Streams 与其他 亚马逊云科技 服务和第三方工具集成。使用 Kinesis Connector Library 时,必须使用适用于 Java | Python | Ruby | Node.js | .NET 的 Kinesis Client Library (KCL) 。 此库的当前最新版本提供与 Amazon DynamoDB、Amazon S3 和 Elasticsearch 集成的连接器。此库还包含各种类型的示例连接器,外加可运行这些示例的 Apache Ant 构建文件。

问:Kinesis Storm Spout 是什么?

Kinesis Storm Spout 是一个预建库,可帮助您轻松将 Kinesis Streams 与 Apache Storm 集成。当前最新版本的 Kinesis Storm Spout 可从 Kinesis 流中提取数据,然后将其作为元组发送出去。您可将此 Spout 添加到 Storm 拓扑中,以便将 Kinesis Streams 作为一种可靠且可扩展的流捕获、存储和重播服务来使用。

问:Kinesis Client Library (KCL)、Kinesis Connector Library 和 Kinesis Storm Spout 可使用哪些编程语言?

目前,Kinesis Client Library (KCL) 可使用 JavaPythonRubyNode.js.NET。Kinesis Connector Library 和 Kinesis Storm Spout 目前可使用 Java。我们期待添加对其他编程语言的支持。

问:我是否必须使用 Kinesis Client Library (KCL) 来构建 Kinesis 应用程序?

不是,您还可以使用 Kinesis Data Streams API 构建 Kinesis 应用程序。但是,我们建议您使用适用于 Java | Python | Ruby | Node.js | .NET 的 Kinesis Client Library (KCL)(如果适用),因为它会执行与分布式流处理相关联的繁重任务,可以帮助您更加高效地开发应用程序。

问:Kinesis Client Library (KCL) 如何与 Kinesis 应用程序交互?

适用于 Java | Python | Ruby | Node.js | .NETKinesis Client Library (KCL) 可作为 Amazon Kinesis Data Streams 和 Kinesis 应用程序之间的中间程序。KCL 使用 IRecordProcessor 接口与您的应用程序进行通信。应用程序实施此接口,同时 KCL 使用此接口中的方法调用应用程序代码。

有关如何使用 KCL 构建应用程序的更多信息,请参阅使用 Kinesis Client Library 开发用于 Kinesis 流的使用者应用程序

问:什么是 Kinesis Client Library (KCL) 生成的工作程序和记录处理器?

Kinesis 应用程序可以有多个应用程序实例,而工作程序则是映射到各个应用程序实例的处理单元。记录处理器是处理 Kinesis 流内分片中的数据的处理单元。一个工作程序可映射到一个或多个记录处理器。一个记录处理器映射到一个分片,并处理此分片中的记录。

启动时,应用程序会调用适用于 Java | Python | Ruby | Node.js | .NETKinesis Client Library (KCL),将工作程序实例化。此调用将为应用程序提供带配置信息的 KCL,如流名称和 亚马逊云科技 凭证。此调用还会传输对 IRecordProcessorFactory 实施的引用。必要时,KCL 使用此工厂创建新的记录处理器,用于处理流中的数据。KCL 使用 IRecordProcessor 接口与这些记录处理器通信。

问:Kinesis Client Library (KCL) 如何持续跟踪 Kinesis 应用程序正在处理的数据记录?

适用于 Java | Python | Ruby | Node.js | .NETKinesis Client Library (KCL) 会自动为每个 Kinesis 应用程序创建一个 Amazon DynamoDB 表,用于跟踪和维护状态信息,如重新分片事件和序列号检查点。该 DynamoDB 表与应用程序共用同一名称,因此您需要确保您的应用程序名称与同一地区内同一账户下的任何现有 DynamoDB 表均不冲突。

我们假设与同一应用程序名称关联的所有工作程序都在同一 Kinesis 流中一起运行。如果您运行同一应用程序代码的其他实例,但使用不同的应用程序名称,则 KCL 会将第二个实例视为也在同一流上运行的完全独立的应用程序。

请注意,除了与 Amazon Kinesis Data Streams 关联的成本之外,我们还将对您的账户收取与 Amazon DynamoDB 表关联的费用。

有关 KCL 如何跟踪应用程序状态的更多信息,请参阅“跟踪 Kinesis 应用程序状态”。

问:如何使用 Kinesis Client Library (KCL) 自动扩展我的 Kinesis 应用程序的处理容量?

您可以为 Kinesis 应用程序创建多个实例,并让这些应用程序实例与属于 Auto Scaling 组的一组 Amazon EC2 实例交叉运行。随着处理需求增长,运行应用程序实例的 Amazon EC2 实例将自动实例化。适用于 Java | Python | Ruby | Node.js | .NETKinesis Client Library (KCL) 将为此新实例生成工作程序,并将记录处理器从超载的现有实例自动移动到此新实例。

问:为何我的 Kinesis 流内有数据,而 GetRecords 调用却返回空结果?

一种可能的原因是,当前分片迭代器指定的位置没有任何记录。即使您使用 TRIM_HORIZON 作为分片迭代器类型,也可能发生这种情况。Kinesis 流表示连续的数据流。您应以循环方式调用 GetRecords 操作,记录将在分片迭代器前进到记录存储的位置时返回。

问:如果 Kinesis 应用程序从流中读取数据时超出 Kinesis 流的容量限制,会怎么样?

Kinesis 流的容量限制由流内的分片数量确定。数据吞吐量或读取数据调用的数量可能会导致超出容量限制。超过容量限制后,读取数据调用将以 ProvisionedThroughputExceeded 例外被拒绝。如果这是因流的输出数据速率的临时增加所致,则使用 Kinesis 应用程序重试最终会完成请求。如果这是因流的输出数据速率的持续增加所致,则应增加流内的分片数量,从而为读取数据调用提供持续成功所需的足够容量。在这两种情况下,您都可以通过 Amazon CloudWatch 指标了解数据流输出数据速率的变化,以及 ProvisionedThroughputExceeded 例外的出现。

管理 Amazon Kinesis Data Streams

问:如何更改 Kinesis 流的吞吐量?

通过调整流内的分片数量(重新分片),您可以更改 Kinesis 流的吞吐量。重新分片操作分为两种:分片拆分和分片合并。在分片拆分中,一个分片被分为两个分片,这会增加流的吞吐量。在分片合并中,两个分片被合并为一个分片,这会减少流的吞吐量。有关 Kinesis Streams 重新分片的更多信息,请参阅对流进行重新分片

问:我多久可以更改一次 Kinesis 流的吞吐量?更改操作需要多长时间?

分片拆分或分片合并等重新分片操作需要几秒钟。一次只能执行一个重新分片操作。因此,对于仅有一个分片的 Kinesis 流,拆分一个分片即可使吞吐量在几秒钟内翻倍。对于具有 1000 个分片的流,拆分 1000 个分片以使吞吐量翻倍则需 30000 秒(8.3 小时)。当需要额外吞吐量时,我们建议您提前增加流的吞吐量。

问:在我通过重新分片更改 Kinesis 流的吞吐量后,Amazon Kinesis Data Streams 是否仍然可用?

是。执行重新分片以更改流的吞吐量期间,您可以继续添加数据,并读取 Kinesis 流中的数据。

问:如何监控我的 Kinesis 流的运行情况和性能?

Amazon Kinesis Data Streams 管理控制台会显示关键操作和性能指标,如 Kinesis 流的数据输入和输出的吞吐量。Kinesis Streams 还与 Amazon CloudWatch 集成,以便您可以针对流收集、查看和分析 CloudWatch 指标。有关 Kinesis Streams 指标的更多信息,请参阅使用 Amazon CloudWatch 监控 Kinesis Data Streams

问:如何管理和控制对 Kinesis 流的访问权限?

Kinesis Streams 集成了 Amazon Identity and Access Management (IAM),这项服务使您能够安全地控制用户对 亚马逊云科技 服务和资源的访问权限。例如,您可以创建一个策略,仅允许特定用户或组向 Kinesis 流添加数据。有关流的访问权限管理和控制的更多信息,请参阅使用 IAM 控制对 Kinesis Data Streams 资源的访问权限

问:如何记录为进行安全分析和运行故障排除而对 Kinesis 流进行的 API 调用?

Amazon Kinesis Data Streams 集成了 Amazon CloudTrail,这项服务可记录您账户的 Amazon API 调用并向您提供日志文件。有关 API 调用日志记录和支持的 Amazon Kinesis Data Streams API 操作的更多信息,请参阅使用 Amazon CloudTrail 记录 Kinesis Data Streams API 调用

问:如何高效地管理 Kinesis 流及其相关成本?

借助 Amazon Kinesis Data Streams,您可以标记 Kinesis 流,从而简化资源和成本的管理。标记是用户定义的标签,以键值对的形式表示,有助于整理 亚马逊云科技 资源。例如,您可以按成本中心标记流,以便根据成本中心对 Amazon Kinesis Data Streams 成本进行分类和跟踪。有关 Amazon Kinesis Data Streams 标签的更多信息,请参阅标记您的 Kinesis 流

问:如何更改 Amazon Kinesis 数据流的数据保留期限?

默认情况下,Amazon Kinesis 会将您的数据最多存储 24 小时。您可以通过 CLI 或 API 调用的控制台启用长期数据保留,启用延长数据保留期限或将期限最多延长至 365 天,可以将数据保留期限延长至 7 天。
有关更改数据保留期限的更多信息,请参阅更改数据保留期限

问:是否有新的 API 可以进一步帮助读取旧数据?

是。现已为 ListShards、GetRecords 和 SubscribeToShard API 推出了 API 增强功能。您可以将新的筛选选项与 ListShards API 中提供的 TimeStamp 参数一起使用,以有效地检索分片图并提高读取旧数据的性能。ListShards 的 TimeStamp 筛选器使应用程序可以从您希望重新处理数据的时间点发现并枚举分片,而无需从 trim horizon 处开始。GetRecords 和 SubscribeToShards 在响应中都有一个新字段子分片,当应用程序完成从已关闭分片中读取数据后,您可以快速发现子分片,而不必再次遍历分片图。快速发现分片可以有效地将所用应用程序的计算资源用于任何大小的流,而与数据保留期限无关。

问:何时应使用 API 增强功能?

如果您计划将数据保留更长时间并定期扩展流的容量,则应考虑使用这些 API 增强功能。流扩展操作将关闭现有分片并打开新的子分片。所有已打开和已关闭分片中的数据将一直保留到保留期限结束。因此,随着保留期限的延长和多次扩展操作,分片的总数量也会线性增加。分片图的这种增加要求您将 ListShards 与 TimeStamp 筛选器、GetRecords 中的 ChildShards 字段以及 SubscribeToShard API 搭配使用,确保迅速发现分片并进行数据检索。要使用这些功能,您需要为标准使用者将 KCL 升级到最新版本 1.x,为 EFO 使用升级到 2.x 版本。

问:如何知道何时应使用最新的 KCL?

为了避免影响性能和可用性,如果流中共有 20000 个分片(包括已打开和已关闭分片),那么您就需要更新到最新的 KCL。您可以使用现有的 ListShards API 来计算流中的分片数量。

安全性

问:当我使用 Kinesis Data Streams 时,我的数据安全程度如何?

Kinesis 本身是非常安全的。只有账户和数据流所有者可以访问他们创建的 Kinesis 资源。Kinesis 支持用户身份验证,以控制对数据的访问。您可以使用 Amazon IAM 策略,选择性地向用户和用户组授予权限。您可以使用 HTTPS 协议,通过 SSL 终端节点从 Kinesis 安全地放置和获取数据。如果您需要额外的安全性,可以使用 Amazon KMS 主密钥进行服务器端加密,对存储在数据流中的数据进行加密。Amazon KMS 允许您使用 亚马逊云科技 生成的 KMS 主密钥进行加密,或者,如果您愿意,也可以在 Amazon KMS 中使用您自己的主密钥。最后,在您将数据放入 Kinesis 之前,可以使用您自己的加密库对客户端数据进行加密。

问:是否可以在不使用公共 IP 的情况下,从我的 Amazon Virtual Private Cloud (VPC) 私下访问 Kinesis Data Streams API?

是,您可以通过创建 VPC 终端节点,从您的 Amazon Virtual Private Cloud (VPC) 私下访问 Kinesis Data Streams API。借助 VPC 终端节点,VPC 和 Kinesis Data Streams 之间的路由由 亚马逊云科技 中国网络处理,而无需互联网网关、NAT 网关。Kinesis Data Streams 使用的最新一代 VPC 终端节点由 Amazon PrivateLink 提供支持,该技术支持使用弹性网络接口 (ENI) 和 VPC 中的私有 IP 在 亚马逊云科技 服务之间实现私有连接。有关 PrivateLink 的详细信息,请访问 PrivateLink 文档

加密

问:放入 Kinesis 数据流中的数据是否可以加密?

是,有两个选项可用于加密放入 Kinesis 数据流中的数据。您可以使用服务器端加密,这是一项完全托管的功能,可以在您将数据放入数据流以及从数据流中获取数据时自动对其进行加密和解密。或者,您可以通过在客户端进行加密和解密,将加密的数据写入数据流。

问:为什么我应该使用服务器端加密而不是客户端加密?

客户通常出于以下原因之一选择服务器端加密而不是客户端加密:

  • 难以执行客户端加密
  • 他们想要在客户端加密基础上施加第二层安全保护
  • 难以实施客户端密钥管理方案

问:什么是服务器端加密?

在将数据写入数据流存储层之前,Kinesis Data Streams 的服务器端加密使用用户指定的 Amazon KMS 主密钥 (CMK) 自动对数据进行加密,并在从存储中检索到数据后对其进行解密。加密后不可写入,且有效载荷和分区密钥不可读,除非写入或读取数据流的用户有权使用选择的密钥对数据流进行加密。因此,服务器端加密可以更轻松地满足管理数据的内部安全性和合规性要求。

使用服务器端加密时,您的客户端应用程序(生产者和使用者)无需了解加密,也不需要管理 CMK 或加密操作,且数据是在 Kinesis Data Streams 服务中处于静止状态和处于活动状态时进行加密的。服务器端加密功能使用的所有 CMK 均由 Amazon KMS 提供。通过 Amazon KMS,可以轻松使用适用于 Kinesis 的 亚马逊云科技 托管 CMK(“一键式”加密方法)、您自己的 Amazon KMS 生成的 CMK 或您导入用于加密的 CMK。

问:是否有服务器端加密入门指南?

是,入门指南位于用户文档中。

问:服务器端加密是否会干扰我的应用程序与 Kinesis Data Streams 的交互方式?

有可能。这取决于您用于加密的密钥,以及管理访问该密钥的权限。

  • 如果您使用适用于 Kinesis 的 亚马逊云科技 托管 CMK(密钥别名 = 亚马逊云科技/kinesis),则使用此密钥启用或禁用加密不会影响您的应用程序。
  • 如果您使用其他主密钥(例如自定义 Amazon KMS 主密钥或您导入到 Amazon KMS 服务中的主密钥),并且如果数据流的生产者和使用者均无权使用用于加密的 Amazon KMS CMK,则您的 PUT 和 GET 请求将失败。在使用服务器端加密之前,您必须配置 Amazon KMS 密钥策略来支持消息的加密和解密。有关 Amazon KMS 权限的示例和更多信息,请参阅 Amazon Key Management Service 开发人员指南中的“Amazon KMS API 权限:操作和资源参考”,或 Kinesis Data Streams 服务器端加密用户文档中的权限指南。

问:使用服务器端加密是否需要支付额外费用?

是,但如果您正在使用适用于 Kinesis 的 亚马逊云科技 托管 CMK,并且未超过免费套餐 KMS API 的使用费用,则使用服务器端加密是免费的。按资源划分的成本如下所示:

密钥:

  • 适用于 Kinesis 的 亚马逊云科技 托管 CMK(别名 = “亚马逊云科技/kinesis”)是免费的。
  • 用户生成的 KMS 密钥受 KMS 密钥成本的限制。了解更多

KMS API 使用情况:

  • API 使用成本适用于每个 CMK,包括自定义 CMK。当 Kinesis Data Streams 轮换数据密钥时,大约每 5 分钟调用一次 KMS。在一个为期 30 天的月份内,由 Kinesis 数据流发起的 KMS API 调用的总费用应低于几美元。请注意,此费用与您在数据生产者和使用者上使用的用户凭证数量成比例,因为每个用户凭证都要求对 Amazon KMS 进行唯一的 API 调用。当您使用 IAM 角色进行身份验证时,每个担任-角色-调用将产生唯一的用户凭证,并且您可能希望缓存担任-角色-调用返回的用户凭证,以节省 KMS 费用。

问:哪些 亚马逊云科技 区域为 Kinesis Data Streams 提供服务器端加密?

Kinesis Data Streams 服务器端加密在所有公共区域内推出,包括由光环新网运营的 亚马逊云科技 中国(北京)区域和由西云数据运营的 亚马逊云科技 中国(宁夏)区域。

问:如何从数据流中启动、更新或移除服务器端加密?

可以使用 亚马逊云科技 管理控制台或 亚马逊云科技 开发工具包完成所有这些操作。有关详细信息,请参阅 Kinesis Data Streams 服务器端加密入门指南

问:服务器端加密使用哪种加密算法?

Kinesis Data Streams 使用 AES-GCM 256 算法进行加密。

问:如果我加密的数据流中已有数据写入(无论是纯文本格式还是密文格式),则更新加密后,是否数据流中的所有数据都会被加密或解密?

否,只有写入数据流的新数据才会被新应用的加密进行加密(或保持解密状态)。

问:Kinesis Data Streams 的服务器端加密对哪些内容加密?

服务器端加密对消息的有效载荷以及由数据流生成应用程序指定的分区密钥进行加密。

问:服务器端加密是分片特定功能还是流特定功能?

服务器端加密是流特定的功能。

问:我可以更改用于加密特定数据流的 CMK 吗?

是,使用 亚马逊云科技管理控制台或 亚马逊云科技 开发工具包,您可以选择一个新的主密钥以应用于特定的数据流。

问:您能否向我介绍从数据发送到启用了服务器端加密的 Kinesis 数据流之时起的数据加密生命周期,何时可以检索数据?

以下介绍了 Kinesis Data Streams 如何使用 Amazon KMS CMK,在消息存储在 PUT 路径之前对其进行加密,以及在 GET 路径中检索消息之后对其进行解密。当您在启用了服务器端加密的数据流上调用 putRecord(s) 或 getRecords 时,Kinesis 和 Amazon KMS 将执行以下操作(包括解密)。

  1. 数据使用基于 HTTPS 的 SSL 从客户的 Kinesis 生产者应用程序(客户端)发送到 Kinesis。
  2. 数据被 Kinesis 接受,存储在 RAM 中,并对记录的有效载荷和分区密钥应用加密。
  3. Kinesis 请求使用纯文本输入密钥资料 (IKM),并使用客户选择的 KMS 主密钥对 IKM 的副本进行加密。
  4. Amazon KMS 创建了一个 IKM,使用主密钥对其加密,然后将纯文本 IKM 和加密的 IKM 都发送到 Kinesis。
  5. Kinesis 使用纯文本 IKM 来派生每个记录唯一的数据密钥。
  6. Kinesis 使用数据密钥加密有效载荷和分区密钥,并从内存中移除纯文本密钥。
  7. Kinesis 将加密的 IKM 附加到加密的数据。
  8. 纯文本 IKM 缓存在内存中以供重用,直到 5 分钟后过期为止。
  9. Kinesis 将加密的消息传递到后端存储,它将在其中进行静态存储,并且可以通过 getRecords 调用进行获取。

调用 getRecords 时,Kinesis 和 Amazon KMS 将执行以下操作(包括解密)。

  1. 当发出 getRecords 调用时,Kinesis 的前端将从后端服务中检索加密的记录。
  2. Kinesis 使用客户请求生成的令牌向 KMS 发出请求。Amazon KMS 对其进行授权。
  3. Kinesis 解密与记录一起存储的加密 IKM。
  4. Kinesis 根据解密的 IKM 重新创建每个记录的数据密钥。
  5. 如果获得授权,Kinesis 会解密有效载荷,并从内存中移除纯文本数据密钥。
  6. 通过 SSL 和 HTTPS,Kinesis 将有效载荷传递给请求记录的 Kinesis 使用者(客户端)。

定价和账单

问:使用 Amazon Kinesis Data Streams 如何收费?

Amazon Kinesis Data Streams 采用简单的按需付费定价模式。既无前期成本也没有最低费用,您只需为使用的资源付费。Amazon Kinesis Data Streams 成本涉及两个方面:

  • 每小时分片成本,由 Kinesis 流内的分片数量确定。
  • PUT 负载单元成本由数据创建器向流中添加的 25KB 负载单元的数量而定。

可选项:

  • 延长数据保留期是一项可选成本,由数据流产生的分片小时数而定。启用延长数据保留期后,您需要为流中的每个分片支付延长保留费。
  • 增强型扇出时一项可选成本,涉及两个方面:使用者分片小时数和数据检索数。使用者分片小时数反映了流中的分片数乘以使用增强型扇出的使用者数。数据检索数取决于使用增强型扇出传递给使用者的 GB 数。
  • 长期数据保留包括两个维度的可选成本:长期数据存储和长期数据检索。长期数据存储反映出存储超过 7 天且不超过 365 天的数据的 GB-月数量。 长期数据检索反映出检索存储超过 7 天的数据的 GB 数。

如需了解有关 Amazon Kinesis Data Streams 成本的更多信息,请登录账单控制台

问:使用 PutRecords 操作取代 PutRecord 操作后,我的 PUT 负载单元成本是否会发生变化?

PUT 负载单元费用是根据向 Kinesis 流中添加的 25KB 负载单元的数量计算得出的。无论使用的是 PutRecords 操作还是 PutRecord 操作,PUT 负载单元成本都不变。

问:除了 Amazon Kinesis Data Streams 费用之外,使用 Kinesis Data Streams 时是否还存在任何其他费用?

如果您使用 Amazon EC2 运行 Kinesis 应用程序,则除了 Amazon Kinesis Data Streams 费用,我们还将向您收取 Amazon EC2 资源的费用。

Kinesis Client Library (KCL) 使用 Amazon DynamoDB 表跟踪记录处理的状态信息。如果您使用 KCL 构建 Kinesis 应用程序,则除了 Amazon Kinesis Data Streams 费用,我们还将向您收取 Amazon DynamoDB 资源的费用。

请注意,以上是两种常见情况,并非所有情况。

详细了解 Amazon Kinesis Data Streams 定价

访问定价页面
准备好开始构建了吗?
开始使用 Amazon Kinesis Data Streams
还有更多问题?
联系我们
关闭
1010 0766
由光环新网运营的
北京区域
1010 0966
由西云数据运营的
宁夏区域
关闭
由光环新网运营的
北京区域
由西云数据运营的
宁夏区域