Kinesis Data Stream 限制

0

【以下的问题经过翻译处理】 大家好!

有人可以向我解释一下在以下文档中发现的Kinesis Data Stream相关的限制吗? https://docs.aws.amazon.com/streams/latest/dev/service-sizes-and-limits.html

  1. GetRecords 每次调用可以从单个分片中检索最多 10 MiB 的数据,每次调用最多可以检索 10,000 条记录。每次调用 GetRecords 都计为一次读取事务。
  2. 每个分片每秒最多可以支持五个读取事务。每个读取事务最多可以提供 10,000 条记录,每个事务的上限为 10 MiB。
  3. 每个分片通过 GetRecords 最多可以支持每秒 2 MiB 的总数据读取速率。如果对 GetRecords 的调用返回 10 MiB,则在接下来的 5 秒内进行的后续调用将引发异常。

我发现这些观点不是很一致,甚至可能相互矛盾。是我没理解吗?

感谢您的帮助。

profile picture
专家
已提问 10 个月前61 查看次数
1 回答
0

【以下的回答经过翻译处理】 我认为,如果您从上到下,首先查看更广泛的 Kinesis Streams 概念,然后查看可供您使用的平均读取容量,则这些要点会更清楚。

您需要了解的第一件事是分片。每个分片每秒最多可支持 1 MB 写入或 2 MB 读取(平均)。这里的关键词是“平均”。这意味着如果一个读取调用返回 10MB 结果,则对分片的接下来的 5 个调用将被限制。另一方面,如果读取调用返回小于 2 MB,您可以进行额外的读取调用,总共每秒调用 5 次。

举个例子:

  1. 您的第一个读取调用 (getRecords) 返回 10MB,您在接下来的 5 秒内发出另一个读取调用?您将收到 ProvisionedThroughputExceededException。
  2. 您在一秒内调用了 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 秒的异常。

希望对您有所帮助!

profile picture
专家
已回答 10 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则