ProvisionedThroughputExceededException - Possible Causes and Solutions

Why Kinesis Streams Load Test Failed

Question

Your team is developing an application that will be making use of Kinesis streams.

A load test was conducted to get 15000 records in GetRecords requests.

The requests failed with ProvisionedThroughputExceededException.

Which of the following could be a reason for this?

Answers

Explanations

Click on the arrows to vote for the correct answer

A. B. C. D.

Answer - C.

Amazon Kinesis Data Streams has the following limits for GetRecords.

GetRecords can retrieve up to 10 MiB of data per call from a single shard and up to 10,000 records per call.

Each call to GetRecords is counted as one read transaction.

For more information on service limits with Kinesis, please refer to the below URL.

https://docs.aws.amazon.com/streams/latest/dev/service-sizes-and-limits.html

The most likely reason for the ProvisionedThroughputExceededException error when attempting to retrieve 15000 records from an AWS Kinesis stream is that the GetRecords requests exceeded the provisioned throughput limit for the stream.

When creating a Kinesis stream, you specify the desired number of shards, which determine the maximum amount of data that can be ingested and retrieved per second. Each shard has a provisioned throughput limit of 1 MB/sec or 1000 records/sec for writes and 2 MB/sec or 5000 records/sec for reads.

In this scenario, the 15000 records requested in the GetRecords requests exceeds the maximum read throughput of a single shard (i.e., 5000 records/sec), which would cause the ProvisionedThroughputExceededException error to be thrown.

Option A is incorrect because AWS Kinesis allows up to 5000 records per second to be read per shard, not just 1000 records.

Option B is also incorrect because the maximum number of shards allowed per stream is 500, and there is no limit on the number of records that can be processed per shard.

Option C is not the reason for the error because the payload limit for a single record in a Kinesis stream is 1 MB, which is not likely to be exceeded by the 15000 records requested in the GetRecords requests.

Option D is also incorrect because there is no limit on the number of streams that can be created in AWS Kinesis.

Therefore, the most likely reason for the ProvisionedThroughputExceededException error in this scenario is that the GetRecords requests exceeded the provisioned throughput limit for the stream, which is determined by the number of shards and the maximum read throughput per shard.