一般性问题

问:什么是 Amazon Kinesis Data Streams?

借助 Amazon Kinesis Data Streams,您可以构建用于处理或分析流数据的自定义应用程序,以满足特定需求。您可将来自成千上万个来源的点击流、应用程序日志和社交媒体等数据持续添加到 Amazon Kinesis 数据流。在数秒内,您的 Amazon 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 的典型情景:

  • 加速日志和数据传送获取:您无需等待批量处理数据,而是让数据创建器在生成数据后立即输入 Amazon Kinesis 数据流,防止因数据创建器出现故障导致的数据损失。例如,系统和应用程序日志可以持续添加到数据流并可在数秒内进行处理。
  • 实时指标和报告:您可以实时从 Amazon Kinesis 数据流数据提取指标并生成报告。例如,您的 Amazon Kinesis 应用程序可以处理系统和应用程序日志的指标和报告,因为数据不断流入而不是等待收到批量数据。
  • 实时数据分析:通过 Amazon Kinesis Data Streams,您可以运行实时流数据分析。例如,您可以将点击流添加到 Amazon Kinesis 数据流,并让您的 Amazon Kinesis 应用程序实时运行分析,从而在数分钟内从数据中获得重要见解,而无需数小时或数天时间。
  • 复杂的数据流处理:您可以创建 Amazon Kinesis 应用程序和数据流的 Directed Acyclic Graphs (DAG)。在这一情景中,一个或多个 Amazon Kinesis 应用程序可将数据添加到一个 Amazon Kinesis 数据流进行进一步处理,以便于进行流处理器的后续阶段。

问:如何使用 Amazon Kinesis Data Streams?

注册 Amazon Web Services 后,可按以下步骤使用 Amazon Kinesis Data Streams:

问:Amazon Kinesis Data Streams 有哪些限制?

通过增加数据流内的分区数量,Amazon Kinesis 数据流的吞吐量能够无限扩展。然而,您在使用 Amazon Kinesis Data Streams 时需要注意某些限制:

  • 默认情况下,添加到数据流的记录可在添加后的最长 24 小时内进行访问。您可以通过启用延长数据保留期限来将该限值提升到长达 7 天。
  • 记录内的数据块的最大尺寸(Base64 编码之前的数据有效载荷)是 1 兆字节 (MB)。
  • 每个分片最高可支持每秒 1000 个 PUT 输入记录。

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

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

Amazon Kinesis Data Streams 允许实时处理大数据流。它提供了记录排序,以及以使用与多个 Amazon Kinesis 应用程序相同的顺序读取和/或重播数据记录的能力。Amazon Kinesis 客户端库 (KCL) 能够将给定分区键的所有记录提供给同一记录处理器,从而能够更加轻松地构建从同一 Amazon Kinesis 数据流读取数据的多个应用程序(例如,执行计数、累积和筛选)。

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

问:应该何时使用 Amazon Kinesis Data Streams,何时使用 Amazon SQS?

我们建议将 Amazon Kinesis Data Streams 用于具有类似以下要求的使用案例:

  • 将相关记录路由到同一记录处理器(如同流处理 MapReduce)。例如,当给定键的所有记录被传输到同一记录处理器时,计数和累积更加简单。
  • 记录的排序。例如,您希望将日志数据从应用程序主机传输到处理/归档主机,同时保持日志报表的顺序。
  • 多个应用程序并发使用同一数据流的能力。例如,您拥有的一个应用程序会更新实时仪表板,另一个应用程序会归档数据到 Amazon Redshift。您希望这两个应用程序并行独立地使用同一数据流的数据。
  • 在数小时后以同一顺序使用记录的能力。例如,您拥有一个记账应用程序,同时审计应用程序在开单应用程序数小时后运行。由于 Amazon Kinesis Data Streams 最多存储数据 7 天,因此您可在记账应用程序运行后的最长 7 天内运行审计应用程序。

我们建议将 Amazon SQS 用于具有类似以下要求的使用案例:

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

重要概念

问:什么是分区?

分区是 Amazon Kinesis 数据流的基本吞吐量单位。一个分区提供 1MB/秒数据输入和 2MB/秒输入输出容量。一个分区最高可支持每秒 1 000 个 PUT 记录。创建数据流时,您将指定所需的分区数量。例如,您可以创建具有两个分区的数据流。这一数据流具有 2MB/秒数据输入和 4MB/秒数据输出的吞吐量,并每秒允许最多 2000 个 PUT 记录。您可以监控 Amazon Kinesis Data Streams 中的分区级别指标,并随着您的数据吞吐量的变化,通过对流重新分区,从您的数据流中动态添加或删除分区。

问:什么是记录?

记录是存储在 Amazon Kinesis 数据流中的数据单元。记录由序列号、分区键和数据块组成。数据 Blob 是您的数据创建器添加到数据流的重要数据。数据块的最大尺寸(Base64 编码前的数据有效载荷)是 1 兆字节 (MB)。

问:什么是分区键?

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

问:什么是序列号?

序列号是每个记录的唯一标识符。序列号由 Amazon Kinesis 在数据创建器调用 PutRecord 或 PutRecords 操作以添加数据到 Amazon Kinesis 数据流时分配。同一分区键的序列号通常会随时间变化增加;PutRecordPutRecords 请求之间的时间段越长,序列号则越大。

创建数据流

问:如何创建 Amazon Kinesis 数据流?

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

问:如何决定 Amazon Kinesis 数据流的吞吐量?

Amazon Kinesis 数据流的吞吐量由数据流内的分区数量决定。请遵照以下步骤估计您的数据流需要的初始分区数量。注意:通过重新分区功能,您可以动态调整分区的数量。

  1. 预计写入数据流的记录的平均大小为千字节 (KB),四舍五入为 1 KB。(average_data_size_in_KB)
  2. 预计每秒写入数据流的记录数量。(number_of_records_per_second)
  3. 决定并行和独立于数据流使用数据的 Amazon Kinesis 应用程序的数量。(number_of_consumers)
  4. 计算传入写入带宽 (KB) (incoming_write_bandwidth_in_KB),这相当于 average_data_size_in_KB 乘以 number_of_records_per_seconds。
  5. 计算传出读取带宽 (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)

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

Amazon Kinesis 数据流的吞吐量按分区单位扩展。单个分区是数据流的最小吞吐量,提供 1MB/秒数据输入和 2MB/秒数据输出。

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

Amazon Kinesis 数据流的吞吐量可无限扩展。默认情况下,每个账户可为每个区域配置 10 个分区。您可以使用 Amazon Kinesis Data Streams 限制表单为单个区域请求超过 10 个分区。

问:记录大小如何影响 Amazon Kinesis 数据流的吞吐量?

一个分区提供 1MB/秒数据输入率,并且支持最高每秒 1000 条 PUT 记录。因此,如果记录大小不到 1KB,则分区的实际输入速率将小于 1MB/秒,受每秒最大 PUT 记录的限制。

向 Kinesis 数据流添加数据

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

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

问:PutRecord 和 PutRecords 之间有何区别?

PutRecord 操作允许 API 调用内的单个数据记录,而 PutRecords 操作允许 API 调用内的多个数据记录。有关 PutRecord 和 PutRecords 操作的更多信息,请参阅 PutRecord 和 PutRecords

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

Amazon Kinesis Producer Library (KPL) 是易于使用且高度可配置的程序库,可以帮助您把数据放到 Amazon Kinesis 数据流中。KPL 呈现了简单的异步可靠界面,使您能够快速实现高创建器吞吐量而客户资源最少。

问:我可以使用什么编程语言或平台访问 Amazon Kinesis API?

Amazon Kinesis API 在 Amazon Web Services 开发工具包中可用。有关适用于 Amazon Web Services 软件开发工具包的编程语言或平台的列表,请参阅用于 Amazon Web Services 的工具

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

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

问:什么是 Amazon Kinesis 代理?

Amazon Kinesis 代理是一款预构建的 Java 应用程序,可提供简单的方法来收集数据并将其发送到 Amazon Kinesis 数据流。您可以在基于 Linux 的服务器环境(如 Web 服务器、日志服务器和数据库服务器)上安装此代理。代理监控特定文件并持续发送数据到数据流。有关更多信息,请参阅使用代理写入

问:Amazon Kinesis Agent 支持哪些平台?

目前,Amazon Kinesis Agent 支持 Amazon Linux 或 Red Hat Enterprise Linux。

问:在哪里能够获取 Amazon Kinesis 代理?

您可以使用下面的命令及链接下载和安装 Amazon Kinesis 代理:

在 Amazon Linux 上:sudo yum install –y aws-kinesis-agent

在 Red Hat Enterprise Linux 上:sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn1.noarch.rpm

通过 GitHub:awlabs/amazon-kinesis-agent

问:如何使用 Amazon Kinesis 代理?

在服务器上安装 Amazon Kinesis 代理后,您可以对其进行配置以监控磁盘上的特定文件,然后持续地将新数据发送到 Amazon Kinesis 数据流。有关更多信息,请参阅使用代理写入

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

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

问:在 PutRecord 或 PutRecords 调用期间,哪些数据计入 Amazon Kinesis 数据流的数据吞吐量?

您的数据 Blob、分区键和数据流名称是 PutRecordPutRecords 调用的必要参数。您的数据 Blob(Base64 编码之前)和分区键的大小将依照 Amazon Kinesis 数据流的数据吞吐量计数,这由数据流内的分区数量确定。

增强型扇出功能

问:什么是增强型扇出功能?

增强型扇出功能是面向 Kinesis Data Streams 使用者的一项可选功能,可在使用者与分区之间提供 2MB/秒的逻辑吞吐量管道。这允许客户增加并行地从数据流中读取数据的使用者数量,同时保持高性能。

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

使用者必须首先注册 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 个以上的使用者,请通过 AWS Support 提交增加上限的请求。务必牢记,通过让 5 个使用者使用增强型扇出功能,而同时让其他使用者不使用增强型扇出功能,您就可以允许总计 5 个以上的使用者从流中读取数据。

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

我们建议使用 KCL 2.x,它将自动注册您的使用者,并使用增强型扇出功能和 HTTP/2 SubscribeToShard API。否则,您可以使用 RegisterStreamConsumer API 手动注册使用者,然后可以使用 SubscribeToShard API 以及您已注册的使用者名称。

问:使用增强型扇出功能是否要支付相关费用?

是,除了针对所检索的每 GB 数据收取的数据检索费用之外,流中分区和已注册使用增强型扇出功能的使用者的每个组合(一个使用者分区小时)都需要按需支付每小时费用。更多详情请参阅 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)。

问:如果我在一小时内终止或启动使用者,那么增强型扇出功能的使用者分区小时计费是否会自动按比例计算?

是的,您只需要按比例为已注册使用增强型扇出功能的使用者实际使用的小时数付费。

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

您只需支付低廉的每 GB 费率,具体费用是按照使用增强型扇出功能的使用者检索的数据字节数计算的。计费时不使用有效载荷取整或最低交付量。

问:为了使用增强型扇出功能,我是否需要更改我的创建器或数据流?

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

读取和处理来自 Kinesis Data Streams 的数据

问:什么是 Amazon Kinesis 应用程序?

Amazon Kinesis 应用程序是读取和处理来自 Amazon Kinesis 数据流的数据使用器。您可以使用 Amazon Kinesis Data AnalyticsAmazon Kinesis APIAmazon Kinesis Client Library (KCL) 构建您的应用程序。

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

适用于 Java | Python | Ruby | Node.js | .NET 的 Amazon Kinesis 客户端库 (KCL) 是一个预构建库,可帮助您轻松构建 Amazon Kinesis 应用程序,用以读取和处理来自 Amazon Kinesis 数据流的数据。

KCL 可以处理各种复杂的问题,如适应数据流的数量变化、均衡流数据负载、协调分布式服务以及以容错方式处理数据。KCL 可让您在构建应用程序时专注于业务逻辑。KCL 2.x 支持 HTTP/1 GetRecords 和 HTTP/2 SubscribeToShard API 配合增强型扇出功能使用,以从流中检索数据。KCL 1.x 不支持 SubscribeToShard API,也不支持增强型扇出功能。

问:如何从 KCL 1.x 升级到 2.x 以使用 SubscribeToShard 和增强型扇出功能?

请访问 Kinesis Data Streams 用户文档,以了解如何从 KCL 1.x 升级到 KCL 2.x。

问:什么是 SubscribeToShard API?

SubscribeToShard API 是一种高性能的流式处理 API,它通过持久连接将数据从分区推送到使用者,不存在客户端发出请求的周期。SubscribeToShard API 使用 HTTP/2 协议在新数据送达分区时向已注册的使用者交付数据(通常在 70 分钟内),与 GetRecords API 相比,交付速度提高约 65%。即使有多个已注册的使用者从相同的分区中读取数据,使用者也能实现快速的数据交付。

问:我可以在不使用增强型扇出功能的情况下使用 SubscribeToShard吗?

不可以,SubscribeToShard 需要使用增强型扇出功能,这意味着您也需要在使用 SubscribeToShard 之前向 Kinesis Data Streams 服务注册您的使用者。

问:SubscribeToShard 持久连接会持续多长时间?

持久连接最长可持续 5 分钟。

问:Kinesis Client Library (KCL) 是否支持 SubscribeToShard?

是,KCL 2.x 版本使用 SubscribeToShard 和增强型扇出功能来从 Kinesis 数据流中高性能检索数据。

问:使用 SubscribeToShard 会产生相关费用吗?

不会,没有与 SubscribeToShard 相关的额外费用,但您必须将 SubscribeToShard 与增强型扇出功能配合使用,而增强型扇出功能要根据每个使用者分区组合与增强型扇出功能交付的每 GB 数据额外收取每小时费用。

问:如果我想使用 SubscribeToShard,是否需要使用增强型扇出功能?

是的,要使用 SubscribeToShard,您需要注册您的使用者,注册后方可激活增强型扇出功能。默认情况下,通过 SubscribeToShard 检索数据时,您的使用者会自动使用增强型扇出功能。

问:什么是 Amazon Kinesis 连接器库?

Amazon Kinesis 连接器库是一个预构建库,可帮助您轻松完成 Amazon Kinesis Data Streams 与其他 AWS 服务和第三方工具的集成。使用 Amazon Kinesis 连接器库需要适用于 Java | Python | Ruby | Node.js | .NET 的 Amazon Kinesis 客户端库 (KCL)。该库的最新版本为 Amazon DynamoDB、Amazon Redshift 和 Amazon S3 和 Elasticsearch 提供了连接器。该库还包括各种类型的示例连接器,并有 Apache Ant 来构建运行示例的文件。

问:什么是 Amazon Kinesis Storm Spout?

Amazon Kinesis Storm Spout 是一个预建库,可帮助您轻松将 Amazon Kinesis Data Streams 与 Apache Storm 集成。最新版本的 Amazon Kinesis Storm Spout 从 Amazon Kinesis 数据流获取数据,再作为元组发出。您将此 spout 添加到 Storm 拓扑中,以将 Amazon Kinesis Data Streams 作为一种可靠、可扩展、流捕获、存储以及重播服务来使用。

问:Amazon Kinesis 客户端库 (KCL)、Amazon Kinesis 连接件库和 Amazon Kinesis Storm Spout 可用于什么编程语言?

Amazon Kinesis 客户端库 (KCL) 当前提供 Java、Python、Ruby、Node.js 和 .NET 等版本。Amazon Kinesis 连接器库和 Amazon Kinesis Storm Spout 当前在 Java 中可用。我们期待添加对其他编程语言的支持。

问:我是否必须为我的 Amazon Kinesis 应用程序使用 Amazon Kinesis 客户端库 (KCL)?

否,您还可以使用 Amazon Kinesis API 构建 Amazon Kinesis 应用程序。然而,我们建议使用适用于 Java | Python | Ruby | Node.js | .NET的 Amazon Kinesis 客户端库 (KCL)(如果适用),因为它会执行与分布式流处理关联的繁重任务,可帮助您更加高效地开发 Amazon Kinesis 应用程序。

问:Amazon Kinesis 客户端库 (KCL) 如何与 Amazon Kinesis 应用程序交互?

适用于 Java | Python | Ruby | Node.js | .NET 的 Amazon Kinesis 客户端库 (KCL) 是 Amazon Kinesis Data Streams 和 Amazon Kinesis 应用程序之间的中间程序。KCL 使用 IRecordProcessor 接口来与应用程序通信。您的应用程序实施此接口,同时 KCL 使用此接口中的方法调用您的应用程序代码。

有关使用 KCL 构建 Amazon Kinesis 应用程序的更多信息,请参阅使用 Amazon Kinesis 客户端库为 Amazon Kinesis 开发使用者应用程序

问:什么是 Amazon Kinesis 客户端库 (KCL) 生成的工作程序和记录处理器?

Amazon Kinesis 应用程序可以有多个应用程序实例,同时进程是映射到每个应用程序实例的处理单元。记录处理器是处理来自 Amazon Kinesis 数据流分区数据的处理单元。一个进程映射到一个或多个记录处理器。一个记录处理器映射到一个分区,并从该分区处理记录。

启动时,应用程序调用适用于 Java | Python | Ruby | Node.js | .NET 的 Amazon Kinesis 客户端库 (KCL) 以实例化工作程序。这一调用将为应用程序提供带配置信息的 KCL,如数据流名称和 AWS 凭证。这一调用还会传输对 IRecordProcessorFactory 实现的引用。KCL 使用此工厂来按需创建新的记录处理器,以处理来自数据流的数据。KCL 使用 IRecordProcessor 接口与这些记录处理器通信。

问:Amazon Kinesis 客户端库 (KCL) 如何保持跟踪 Amazon Kinesis 应用程序处理的数据记录?

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

假定所有与同一应用程序名称关联的工作程序在同一 Amazon Kinesis 数据流上配合工作。如果您运行同一应用程序代码的其他实例,但使用不同的应用程序名称,则 KCL 会将第二个实例视为在同一数据流运行的完全独立的应用程序。

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

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

问:我如何使用 Amazon Kinesis 客户端库 (KCL) 自动扩展 Amazon Kinesis 应用程序的处理容量?

您可为 Amazon Kinesis 应用程序创建多个实例,并让这些应用程序实例运行在作为 Auto Scaling 组一部分的一组 Amazon EC2 实例。尽管处理需求增长,但是运行您应用程序实例的 Amazon EC2 实例将自动实例化。适用于 Java | Python | Ruby | Node.js | .NET 的 Amazon Kinesis 客户端库 (KCL) 将为此新实例生成进程,并从超载的现有实例自动移动记录处理器到此新实例。

问:当 Amazon Kinesis 数据流中存在数据时,GetRecords 调用为何返回空结果?

一个可能的原因是,当前分区迭代器指定的位置没有任何记录。即使您使用 TRIM_HORIZON 作为分区迭代器类型也可能出现这种情况。Amazon Kinesis 数据流代表着持续的数据流。您应在一个循环中调用 GetRecords 操作,相关记录将在分区迭代器数据记录存储到位时返回。

问:GetRecords 操作中返回的 ApproximateArrivalTimestamp 是什么?

每条记录都包含一个称作 ApproximateArrivalTimestamp 的值。Amazon Kinesis 在成功收到并存储记录后设置该值。该时间戳精确到毫秒,但不保证时间戳准确。例如,分区中或跨数据流的记录的时间戳可能是乱序的。

问:如果 Amazon Kinesis 应用程序从数据流读取数据时超出 Amazon Kinesis 数据流的容量限制该怎么办?

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

管理 Kinesis Data Streams

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

有两种方法可以更改数据流的吞吐量。您可以使用 UpdateShardCount APIAWS 管理控制台来扩展数据流中的分区数量,也可以通过调整数据流中的分区数量(重新分区)来更改 Amazon Kinesis 数据流的吞吐量。

问:使用 UpdateShardCount 或 AWS 管理控制台更改 Amazon Kinesis 数据流的吞吐量需要多长时间?

一般的扩展请求只需几分钟时间即可完成,较大的扩展请求需要的时间要长于较小的请求。

问:UpdateShardCount 上限是多少?

有关 UpdateShardCount 上限的信息,请参阅 Amazon Kinesis Data Streams Service API 参考

问:使用 UpdateShardCount 或通过重新分区更改 Amazon Kinesis 数据流的吞吐量后,Amazon Kinesis Data Streams 是否仍然可用?

是。在使用 UpdateShardCount 或通过重新分区更改数据流吞吐量期间,您可以继续向 Amazon Kinesis 数据流添加数据和从中读取数据。

问:什么是重新分区?

重新分区是通过对一系列分区进行拆分或合并来扩展数据流的过程。在分区拆分中,单个分区被分为两个分区,这将增加数据流的吞吐量。在分区合并中,两个分区被合并到单个分区,这将减少数据流的吞吐量。有关更多信息,请参阅 Amazon Kinesis Data Streams 开发人员指南中的对数据流进行重新分区

问:使用重新分区更改 Amazon Kinesis 数据流的吞吐量需要间隔多久,每次需要多长时间?

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

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

默认情况下,Amazon Kinesis 会将您的数据存储长达 24 小时。您可以通过启用延长数据保留期限来将数据保留期限值提升到长达 7 天。

有关更改数据保留期限的更多信息,请参阅更改数据保留期限

问:如何监控 Amazon Kinesis 数据流的运行和性能?

Amazon Kinesis Data Streams 管理控制台会显示关键运营和性能指标,如 Amazon Kinesis 数据流的数据输入和输出的吞吐量。Amazon Kinesis Data Streams 还与 Amazon CloudWatch 集成,以便您可以为数据流及其中的分区收集、查看和分析 CloudWatch 指标。有关 Amazon Kinesis Data Streams 指标的更多信息,请参阅利用 Amazon CloudWatch 监控 Amazon Kinesis Data Streams 服务

请注意,所有流级别的指标都是免费的。所有已启用的分区级别的指标均根据 Amazon CloudWatch 定价进行收费。

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

Amazon Kinesis Data Streams 与 AWS Identity and Access Management (IAM) 服务集成,后者让您能够安全控制对 AWS 产品和用户资源的访问权限。例如,您可以创建仅允许特定用户或组向 Amazon Kinesis 数据流添加数据的策略。有关数据流访问管理和控制的更多信息,请参阅使用 IAM 控制对 Amazon Kinesis Data Streams 资源的访问

问:如何记录针对 Amazon Kinesis 数据流的 API 调用,以便用于安全分析和运行故障排除?

Amazon Kinesis 可与 Amazon CloudTrail 服务集成,后者可为您的账户记录 AWS API 调用并给您提供日志文件。有关 API 调用日志的更多信息和支持的 Amazon Kinesis API 操作的列表,请参阅使用 Amazon CloudTrail 记录 Amazon Kinesis API 调用

问:如何高效管理 Amazon Kinesis 数据流以及这些数据流的相关成本?

使用 Amazon Kinesis Data Streams,您能够标记 Amazon Kinesis 数据流,从而更加轻松地管理资源和成本。标签是以键-值对表示的用户定义的标记,帮助组织 AWS 资源。例如,您可以使用成本中心标记流,从而基于成本中心分类和跟踪 Amazon Kinesis Data Streams。有关 Amazon Kinesis Data Streams 标签的更多信息,请参阅标记您的 Amazon Kinesis Data Streams

问:如何描述使用分区上限的方式?

您可以使用 DescribeLimits API 来了解如何对账户使用分区上限。DescribeLimits API 将返回分区上限以及您的账户中开启的分区数。如果您需要提高分区上限,请申请提升上限

安全性

问:使用 Kinesis Data Streams 时,数据的安全性如何?

Kinesis 在默认情况下是安全的。仅账户和数据流所有者才有权访问自己创建的 Kinesis 资源。Kinesis 支持用户身份验证,以控制对数据的访问。您可以使用 AWS IAM 策略选择性地向用户和用户组授予权限。您可以使用 HTTPS 协议通过 SSL 终端节点安全地向 Kinesis 放入数据和从中获取数据。如果您需要额外的安全性,可使用服务器端加密和 AWS KMS 主密钥对存储在数据流中的数据进行加密。AWS KMS 允许您使用 AWS 生成的 KMS 主密钥进行加密,或者您也可以选择将自己的主密钥添加到 AWS 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 之间的路由可由 AWS 网络处理,而无需使用 Internet 网关、NAT 网关或 VPN 连接。Kinesis Data Streams 所使用的最新一代 VPC 终端节点由 AWS PrivateLink 提供支持。AWS PrivateLink 是一种通过使用 VPC 中带有私有 IP 的弹性网络接口来支持各 AWS 产品之间的私有连接的技术。要了解有关 PrivateLink 的更多信息,请参阅 PrivateLink 文档

加密

问:能否加密输入 Kinesis 数据流的数据?

能。您可以通过两种方式加密输入 Kinesis 数据流的数据。您可以使用服务器端加密(一项完全托管的功能),该功能会在您向数据流输入数据和从中提取数据时自动对数据进行加密和解密。或者,您也可以通过在客户端上进行加密和解密,向数据流写入加密数据。

问:为何应使用服务器端加密而非客户端加密?

出于以下任一原因,客户通常会选择服务器端加密而非客户端加密:

  • 很难执行客户端加密
  • 他们希望在客户端加密之上再增加一层安全保障
  • 很难实施客户端密钥管理方案

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

适用于 Kinesis Data Streams 的服务器端加密会使用用户指定的 AWS KMS 主密钥 (CMK) 在数据写入数据流存储层之前自动加密,并在数据从存储中检索后进行解密。加密使得写入操作无法执行且无法读取负载和分区键,除非向数据流写入或从中读取数据的用户有权使用所选密钥在数据流上进行加密。因此,使用服务器端加密更易达到内部针对监管数据的安全性和合规性要求。

借助服务器端加密,客户端应用程序(创建器和使用器)无需获知加密,也无需管理 CMK 或加密操作,并且 Kinesis Data Streams 服务内的静态和动态数据都会得到加密。服务器端加密功能使用的所有 CMK 均由 AWS KMS 提供。AWS KMS 让您可以轻松使用适用于 Kinesis 的 AWS 托管型 CMK(一种“一键式”加密方法)、AWS KMS 为您生成的 CMK 或您为进行加密而导入的 CMK。

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

有。用户文档中提供了入门指南。

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

可能会。这取决于您用于加密的密钥和监管密钥访问的权限。

  • 如果您使用适用于 Kinesis 的 AWS 托管型 CMK(密钥别名 = aws/kinesis),则借助此密钥启用或禁用加密不会影响您的应用程序。
  • 如果您使用其他主密钥(如自定义的 AWS KMS 主密钥或您导入 AWS KMS 服务的主密钥),且数据流的创建器和使用器无权使用加密所用的 AWS KMS CMK,那么 PUT 和 GET 请求将会失败。要使用服务器端加密,您必须先配置 AWS KMS 密钥策略以允许加密和解密消息。要了解相关示例和有关 AWS KMS 权限的更多信息,请参阅 AWS Key Management Service 开发人员指南中的“AWS KMS API 权限:操作和资源参考”或 Kinesis Data Streams 服务器端加密用户文档中的权限指南。

问:使用服务器端加密是否会额外产生相关费用?

会。但如果您使用的是适用于 Kinesis 的 AWS 托管型 CMK,并且 KMS API 使用费没有超出免费套餐,则使用服务器端加密免费。下面按资源介绍了费用:

密钥:

  • 适用于 Kinesis 的 AWS 托管型 CMK(别名 = “aws/kinesis”)是免费的。
  • 用户生成的 KMS 密钥会产生 KMS 密钥费。了解更多。​

KMS API 使用情况:

  • AWS 会对每个 CMK(包括自定义 CMK)收取 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 的服务器端加密会加密哪些内容?

服务器端加密会加密消息的负载以及数据流创建器应用程序指定的分区键。

问:服务器端加密是一项特定于分区的功能还是特定于数据流的功能?

服务器端加密是一项特定于数据流的功能。

问:能否更改用于加密特定数据流的 CMK?

能。使用 AWS 控制台或 AWS 开发工具包即可选择将新的主密钥应用到特定数据流。

问:您能否向我演示数据的加密生命周期,从启用服务器端加密将其发送至 Kinesis 数据流到进行检索?

下面将向您演示 Kinesis Data Streams 如何使用 AWS KMS CMK 在消息存储到 PUT 路径之前进行加密以及在 GET 路径中检索后进行解密。如果启用了服务器端加密,那么当您在数据流上调用 putRecord(s) 或 getRecords 时,Kinesis 和 AWS KMS 会执行以下操作(包括解密)。

  1. 客户的 Kinesis 创建器应用程序(客户端)使用 SSL 通过 HTTPS 将数据发送至 Kinesis。
  2. Kinesis 接收数据并将其存储在 RAM 中,同时加密记录的负载和分区键。
  3. Kinesis 请求纯文本输入密钥材料 (IKM),并使用客户所选的 KMS 主密钥加密该 IKM 的副本。
  4. AWS KMS 创建 IKM,使用主密钥对其进行加密,然后将纯文本 IKM 和加密 IKM 一起发送至 Kinesis。
  5. Kinesis 使用纯文本 IKM 获取每个记录独有的数据密钥。
  6. Kinesis 使用这些数据密钥加密负载和分区键并从内存中移除纯文本密钥。
  7. Kinesis 将加密 IKM 附加到加密数据。
  8. 纯文本 IKM 缓存在内存中以供重复使用,直到 5 分钟之后过期。
  9. Kinesis 将加密消息传递至后端存储,以便静态存储并可通过调用 getRecords 进行提取。

在您调用 getRecords 时,Kinesis 和 AWS KMS 会执行以下操作(包括解密)。

  1. 进行 getRecords 调用时,Kinesis 的前端会从后端服务中检索加密记录。
  2. Kinesis 使用客户的请求生成的令牌向 KMS 发出请求。AWS KMS 予以授权。
  3. Kinesis 解密随记录存储的加密 IKM。
  4. Kinesis 通过解密的 IKM 为每个记录重新创建数据密钥。
  5. 如果获得授权,Kinesis 会解密负载并从内存中移除纯文本数据密钥。
  6. Kinesis 通过 SSL 和 HTTPS 将负载传递至请求记录的 Kinesis 使用器(客户端)。

定价与计费

问:AWS 免费套餐中是否提供 Amazon Kinesis Data Streams?

未提供。Amazon Kinesis Data Streams 当前不在 AWS 免费套餐中提供。AWS 免费套餐是一项提供了免费试用一系列 AWS 服务的计划。有关 AWS 免费套餐的更多详细信息,请参阅 AWS 免费套餐

问:Amazon Kinesis Data Streams 如何收费?

Amazon Kinesis Data Streams 使用简单的按需付费定价结构。它没有预付费用或最低费用,您仅需为使用的资源付费。Amazon Kinesis Data Streams 的费用有两个核心维度和三个可选维度:

  • 每小时分区费用由您的 Amazon Kinesis 数据流内的分区数量决定。
  • PUT Payload Unit 收费根据数据创建器添加到您的数据流的 25KB 负载单元的数量决定。

可选:

  • 延长数据保留期属于一项可选的费用,由您的数据流产生的分区小时数决定。启用延长数据保留期后,您需要为流中的每个分区支付延长保留期费率。
  • 增强型扇出功能的费用属于可选成本,具有两个成本维度:使用者分区小时和数据检索。使用者分区小时的计算方式是流中的分区数乘以使用增强型扇出功能的使用者数量。数据检索量取决于使用增强型扇出功能传递给使用者的 GB 数。 

有关 Amazon Kinesis Data Streams 费用的更多信息,请参阅 Amazon Kinesis Data Streams 定价

问:用 PutRecords 操作取代 PutRecord 操作,PUT Payload Unit 费用是否会发生变化?

PUT Payload Unit 费用根据添加到您的 Amazon Kinesis 数据流的 25KB 负载单元的数量决定。无论使用 PutRecords 操作还是 PutRecord 操作,PUT Payload Unit 费用都不变。

问:处于“CLOSED”状态的分区收费吗?

重新分区后,分区可能会处于“CLOSED”状态。处于“CLOSED”状态的分区不收费。

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

如果您使用 Amazon EC2 运行 Amazon Kinesis 应用程序,则将对 Amazon EC2 资源收取费用,Amazon Kinesis Data Streams 费用除外。

Amazon Kinesis 客户端库 (KCL) 使用 Amazon DynamoDB 表跟踪记录处理的状态信息。如果您为自己的 Amazon Kinesis 应用程序使用 KCL,则将对 Amazon DynamoDB 资源收取费用,Amazon Kinesis Data Streams 费用除外。

如果您启用增强的分区级别指标,则除了 Amazon Kinesis Data Streams 费用以外,还需要支付与已启用的分区级别指标相关的 Amazon CloudWatch 费用。

请注意,以上三个示例常见但并不详尽。

了解有关 Amazon Kinesis Data Streams 定价的更多信息

访问定价页面
准备好开始使用了吗?
注册
还有更多问题?
联系我们