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
EXPERTE
gefragt vor 5 Monaten41 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen