- 最新
- 投票最多
- 评论最多
【以下的回答经过翻译处理】 我认为,如果您从上到下,首先查看更广泛的 Kinesis Streams 概念,然后查看可供您使用的平均读取容量,则这些要点会更清楚。
您需要了解的第一件事是分片。每个分片每秒最多可支持 1 MB 写入或 2 MB 读取(平均)。这里的关键词是“平均”。这意味着如果一个读取调用返回 10MB 结果,则对分片的接下来的 5 个调用将被限制。另一方面,如果读取调用返回小于 2 MB,您可以进行额外的读取调用,总共每秒调用 5 次。
举个例子:
- 您的第一个读取调用 (getRecords) 返回 10MB,您在接下来的 5 秒内发出另一个读取调用?您将收到 ProvisionedThroughputExceededException。
- 您在一秒内调用了 5 次,总共返回了 1 MB 的数据。您发出第 6 次读取调用。即使您只读取了 1MB 的数据,您也会收到 Provisioned Throughput Exceeded 异常。这是因为您已经超出了在一秒间隔内可以读取的次数。
您可能会对每个分片的读取容量上限 2MB 感到困惑。我认为您应该将其视为“平均”读取容量而不是固定读取容量,但平均值是从您发出超过 2MB 限制的调用开始的。因此,虽然您可以进行 10 MB 的读取(因为 getRecords 限制为 10Mb),但这意味着您在剩余的 5 分钟内用完了 5 秒的容量。
请阅读以下内容: https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html
其中第 5 段进行了说明: GetRecords 返回的数据大小取决于分片的利用率。 GetRecords 可以返回的最大数据大小为 10 MiB。如果调用返回此数据量,则在接下来的 5 秒内进行的后续调用会抛出 ProvisionedThroughputExceededException。如果Stream的配置吞吐量不足,则在接下来的 1 秒内进行的后续调用会抛出 ProvisionedThroughputExceededException。 GetRecords 在抛出异常时不返回任何数据。因此,我们建议您在两次调用 GetRecords 之间等待 1 秒。但是,应用程序可能会收到超过 1 秒的异常。
希望对您有所帮助!
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 6 个月前
- AWS 官方已更新 4 个月前