选择正确的流式传入的模式
以下主题说明了如何为应用程序选择最佳模式,以及如何根据需要切换模式。
Kinesis Data Streams 中有哪些不同的模式?
模式决定如何管理数据流的容量以及如何对数据流的使用收费。在 Amazon Kinesis Data Streams 中,您可以为数据流选择按需标准、按需优势和预置模式。
-
按需标准:按需模式的数据流无需容量规划,并且可以自动扩展以处理每分钟数 GB 的写入和读取吞吐量。若采用按需模式,Kinesis Data Streams 会自动管理分片来提供必要的吞吐量。
-
按需优势:这是一种账户级模式,可提供更多功能,并简化按需流的定价体系。在此模式下,您可以在任何时间主动预热某个流的写入吞吐能力。对于定价,不再采用固定的流级计费模式,而且所有按需流的数据摄取、数据检索和延长留存使用量比按需标准流至少低 60%。
-
预置:对于处于预置模式的数据流,您必须指定数据流的分片数量。数据流的总容量是其分片容量的总和。您可以根据需要增加或减少数据流中的分片数。
您可以使用 Kinesis Data Streams PutRecord 和 PutRecords API 在任何模式下将数据写入数据流。为了检索数据,所有三种模式都支持使用 GetRecords API 的默认消费端和使用 SubscribeToShard API 的增强型扇出(EFO)消费端。
按需模式和预置模式均支持 Kinesis Data Streams 的所有功能,包括保留模式、加密、监控指标等。Kinesis Data Streams 在按需和预置容量模式下都具有较高持久性和可用性。
按需标准模式的特征和用例
按需模式的数据流无需容量规划,并且可以自动扩展以处理每分钟数 GB 的写入和读取吞吐量。按需模式以低延迟的方式简化了摄取和存储大量数据的过程,因为它无需预置和管理服务器、存储或吞吐量。您每天可以摄取数十亿条记录,而不会产生任何运营开销。
按需模式非常适合用于应对高度可变且不可预测的应用程序流量的需求。您不再需要为峰值容量预置这些工作负载,因为峰值容量可能会因为利用率低而导致成本更高。按需模式适用于流量模式不可预测且高度可变的工作负载。
在按需容量模式下,您将按数据流中写入和读取的数据,为每 GB 数据付费。您无需指定预期应用程序执行的读写吞吐量。Kinesis Data Streams 会随着工作负载的增加或减少立即进行调整。有关更多信息,请参阅 Amazon Kinesis Data Streams 定价
按需模式下的数据流最多可容纳过去 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 在检测到流量增加时会均匀地拆分分片。但是,它不会检测和隔离将更高比例的传入流量传送到特定分片的哈希键。如果您使用的分区键非常不均匀,则可能会继续收到写入异常的提示。对于此类使用案例,我们建议您使用支持精细分片拆分的预置容量模式。
按需优势模式的特征和用例
按需优势模式是一种账户级设置,可解锁更多功能,并为区域内的所有按需流提供不同的定价体系。在此模式下,按需流仍保留其功能,并根据数据实际使用量继续自动扩缩容量。如果想主动预热某个流的写入吞吐能力,可配置热吞吐量。例如,如果数据流的写入吞吐量介于 10 MB/s 和 40 MB/s 之间,则数据流有望在不施加限制的情况下处理高达 80MB/s 的即时吞吐量增长。但是,如果预测未来事件的峰值流量达到 200 MB/s 左右,则可以将流的热吞吐量配置为 200 MB/s,以确保在达到这种数据吞吐量时容量可用。使用热吞吐量不会产生额外费用。
按需优势模式的另一个好处是按需流可以过渡至更简单的定价体系。启用该模式后,账户将不再产生固定的按流计费,您只需处理数据摄取、数据检索和可选的延长留存费用。与按需标准模式相比,每个定价维度都有很大的折扣。有关更多信息,请参阅 Amazon Kinesis Data Streams 定价
在这种模式下,增强扇出型数据检索也不会产生相较于标准数据检索的价格溢价。启用按需模式之后,账户在所有按需流中至少可获得 25 MiB/s 的数据摄取和 25 MiB/s 的数据检索使用量。对于满足最低使用要求的账户,Kinesis Data Streams 控制台会检查账户的使用模式是否适合使用按需优势模式。
如果账户的数据使用量低于要求,则需要对差额付费,但折扣率仍将保持不变。启用按需优势模式之后,至少还需要 24 小时才能禁用此模式。总体而言,如果持续使用的吞吐量接近或超过最低承诺值、需要大量扇出型消费端或使用数百个数据流,则按需优势模式即为使用 Kinesis Data Streams 进行流式传输的最佳方案。
预置模式的特征和用例
在预置模式下,在创建数据流后,可以使用 AWS 管理控制台 或 UpdateShardCount API 动态扩展或缩减分片的容量。您可以在 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 = ceiling(max(incoming_write_bandwidth_in_KiB/1024, outgoing_read_bandwidth_in_KiB/2048))
如果您未将数据流配置为处理峰值吞吐量,则在预置模式下仍可能遇到读写吞吐量异常的问题。在这种情况下,您必须手动扩展数据流以适应数据流量。
如果您使用的分区键会导致数据分配不均匀,并且分配给特定分片的记录超出了其限制,则可能也会遇到读写异常的问题。要在预置模式下解决此问题,请确定此类分片并手动拆分,以更好地适应流量。有关更多信息,请参阅对流进行重新分片。
切换模式
对于 AWS 账户 中的每个数据流,24 小时内您可以在按需和预置模式之间切换两次。切换模式不会对使用该数据流的应用程序造成任何中断。您可以继续读写该数据流。当您在各模式之间切换(从按需切换到预置,或反之)时,流的状态将设置为正在更新。必须等待数据流状态变为活动,然后才能再次修改其属性。
当您从预置容量模式切换到按需容量模式时,数据流最初会保留转换之前的所有分片数量,从此时起,Kinesis Data Streams 将监控您的数据流量,并根据写入吞吐量扩展此按需数据流的分片数量。当您从按需模式切换到预置模式时,数据流最初也会保留转换之前的所有分片数量,但是从此时起,您将负责监控和调整此数据流的分片数量,以正确适应写入吞吐量。
可以通过启用账户级设置,从按需标准模式切换到按需优势模式。启用后,账户在该区域的所有按需流中至少可获得 25 MiB/s 的数据摄取和 25 MiB/s 的数据检索使用量。启用后,至少须等待 24 小时才能禁用按需优势模式,但您可以随时申请更改。如果要从按需优势模式切换到按需标准模式,则必须先移除任何配置了按需流的热吞吐量。