选择数据流容量模式 - Amazon Kinesis Data Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

选择数据流容量模式

什么是数据流容量模式?

容量模式决定如何管理数据流的容量以及如何对数据流的使用收费。在 Amazon Kinesis Data Streams 中,您可以为数据流选择按需模式和预置模式。

  • 按需 – 按需模式的数据流无需容量规划,并且可以自动扩展以处理每分钟数 GB 的写入和读取吞吐量。若采用按需模式,Kinesis Data Streams 会自动管理分片来提供必要的吞吐量。

  • 预置 – 对于处于预置模式的数据流,您必须指定数据流的分片数量。数据流的总容量是其分片容量的总和。您可以根据需要增加或减少数据流中的分片数。

您可以使用 Kinesis Data Streams PutRecordPutRecords API 在按需和预置容量模式下将数据写入数据流。为了检索数据,两种容量模式都支持使用 GetRecords API 的默认消费端和使用 SubscribeToShard API 的增强型扇出(EFO)消费端。

按需模式和预置模式均支持 Kinesis Data Streams 的所有功能,包括保留模式、加密、监控指标等。Kinesis Data Streams 在按需和预置容量模式下都具有较高持久性和可用性。

按需模式

按需模式的数据流无需容量规划,并且可以自动扩展以处理每分钟数 GB 的写入和读取吞吐量。按需模式以低延迟的方式简化了摄取和存储大量数据的过程,因为它无需预置和管理服务器、存储或吞吐量。您每天可以摄取数十亿条记录,而不会产生任何运营开销。

按需模式非常适合用于应对高度可变且不可预测的应用程序流量的需求。您不再需要为峰值容量预置这些工作负载,因为峰值容量可能会因为利用率低而导致成本更高。按需模式适用于流量模式不可预测且高度可变的工作负载。

在按需容量模式下,您将按数据流中写入和读取的数据,为每 GB 数据付费。您无需指定预期应用程序执行的读写吞吐量。Kinesis Data Streams 会随着工作负载的增加或减少立即进行调整。有关更多信息,请参阅 Amazon Kinesis Data Streams 定价

您可以使用 Kinesis Data Streams 控制台、API 或 CLI 命令创建新的按需模式数据流。

按需模式下的数据流最多可容纳过去 30 天内观察到的峰值写入吞吐量的两倍。当数据流的写入吞吐量达到新的峰值时,Kinesis Data Streams 会自动扩展数据流的容量。例如,如果您的数据流的写入吞吐量介于 10MB/s 和 40MB/s 之间,那么 Kinesis Data Streams 可确保您可以轻松地突增至前一个峰值吞吐量的两倍,即 80MB/s。如果同一数据流保持 50MB/s 的新峰值吞吐量,Kinesis Data Streams 会确保有足够的容量来摄取 100MB/s 的写入吞吐量。但是,如果您的流量在 15 分钟内增加到前一个峰值的两倍以上,则可能会产生写入节流。您需要重试这些受限的请求。

按需模式下的数据流聚合读取容量与写入吞吐量成比例增加。这有助于确保消费端应用程序始终有足够的读取吞吐量来实时处理传入的数据。与使用 GetRecords API 读取数据相比,您获得的写入吞吐量至少是其两倍。我们建议您使用带有 GetRecord API 的消费端应用程序,这样当应用程序需要从停机时间中恢复时,有足够的空间来赶上。对于需要添加多个消费端应用程序的场景,建议您使用 Kinesis Data Streams 的增强型扇出功能。增强型扇出功能支持使用 SubscribeToShard API 将最多 20 个消费端应用程序添加到数据流中,每个消费端应用程序都有专用的吞吐量。

处理读写吞吐量异常

在按需容量模式(与预置容量模式相同)下,必须为每条记录指定一个分区键,才能将数据写入数据流。Kinesis Data Streams 使用分区键在分片之间分配数据。Kinesis Data Streams 监控每个分片的流量。当每个分片的传入流量超过 500KB/s 时,系统会在 15 分钟内拆分该分片。父分片的哈希键值在子分片之间均匀地重新分配。

如果您的传入流量超过之前峰值的两倍,即使您的数据在分片上均匀分配,您也可能会在约 15 分钟内遇到读取或写入异常的问题。我们建议您重试所有此类请求,以便将所有记录正确存储在 Kinesis Data Streams 中。

如果您使用的分区键会导致数据分配不均匀,并且分配给特定分片的记录超出了其限制,则可能会遇到读写异常的问题。在按需模式下,数据流会自动适应以处理不均匀的数据分配模式,除非单个分区键超过分片的 1Mb/s 吞吐量和每秒 1000 条记录的限制。

在按需模式下,Kinesis Data Streams 在检测到流量增加时会均匀地拆分分片。但是,它不会检测和隔离将更高比例的传入流量传送到特定分片的哈希键。如果您使用的分区键非常不均匀,则可能会继续收到写入异常的提示。对于此类使用案例,我们建议您使用支持精细分片拆分的预置容量模式。

预置模式

在预配置模式下,在创建数据流之后,您可以使用或 API 动态地向上或向下扩展分片容量。Amazon Web Services Management Console UpdateShardCount您可以在 Kinesis Data Streams 创建器或消费端应用程序在向流写入数据或从中读取数据时进行更新。

预置模式适用于容量需求易于预测的可预测流量。如果您想精细控制分片间数据的分配方式,则可以使用预置模式。

若采用预置模式,您必须为数据流指定分片数。要确定预置模式下数据流的大小,您需要以下输入值:

  • 写入流的数据记录的平均大小,以 KB 为单位,四舍五入为 1 KB (average_data_size_in_KB)。

  • 每秒写入流和从流读取的数据记录数 (records_per_second)。

  • 消费端数量,即并发且独立使用流中数据的 Kinesis Data Streams 应用程序的数量 (number_of_consumers)。

  • 以 KB 为单位的传入写入带宽 (incoming_write_bandwidth_in_KB),等于 average_data_size_in_KB 乘以 records_per_second

  • 以 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_KiB/1024, outgoing_read_bandwidth_in_KiB/2048)

如果您未将数据流配置为处理峰值吞吐量,则在预置模式下仍可能遇到读写吞吐量异常的问题。在这种情况下,您必须手动扩展数据流以适应数据流量。

如果您使用的分区键会导致数据分配不均匀,并且分配给特定分片的记录超出了其限制,则可能也会遇到读写异常的问题。要在预置模式下解决此问题,请确定此类分片并手动拆分,以更好地适应流量。有关更多信息,请参阅对流进行重新分片

在容量模式之间切换

您可以将数据流的容量模式在按需模式和预置模式之间互相切换。对于您 Amazon 账户中的每个数据流,24 小时内您可以在按需和预置容量模式之间切换两次。

在数据流的容量模式之间切换不会对使用该数据流的应用程序造成任何中断。您可以继续读写该数据流。当您在容量模式之间切换(从按需切换到预置,或反之)时,流的状态将设置为正在更新。必须等待数据流状态变为活动,然后才能再次修改其属性。

当您从预置容量模式切换到按需容量模式时,数据流最初会保留转换之前的所有分片数量,从此时起,Kinesis Data Streams 将监控您的数据流量,并根据写入吞吐量扩展此按需数据流的分片数量。

当您从按需模式切换到预置模式时,数据流最初也会保留转换之前的所有分片数量,但是从此时起,您将负责监控和调整此数据流的分片数量,以正确适应写入吞吐量。