Kinesis Streams Gotcha - Scaling On-Demand Streams
Kinesis Data Stream On-Demand Gotcha
ON_DEMAND
Kinesis data streams are originally created with 4 shards and help scale data streams when the traffic load is unknown. By design, ON_DEMAND
streams will look at network traffic from 15 days ago to determine peak operations that were experienced. ON_DEMAND
streams are capable of scaling up one level. For example, 4 Shards scales up to 8 Shards, and 8 shards scales up to 16 Shards, etc… The issue occurs whenever traffic/write operations are doubled compared to what was seen in the last 15 days. This causes AWS Kinesis Streams that are
ON_DEMAND
to get throttled returning a message similar to the following: Rate exceeded for shard shardId-XXXX in stream <STREAM NAME> under account <ACCOUNT NUMBER>
. In order to fix this issue, we have to switch the Kinesis Data Stream from
ON_DEMAND
to PROVISIONED
in order to be able to increase the shard count. After the shard count is increased, we need to switch back to ON_DEMAND
to maintain the new shard count.Even when managing the Kinesis Data Stream through Terraform, we are unable to increase the shard count without first switching over to
PROVISIONED
. Hence, watch out for this gotcha. Even with this gotcha, using
ON_DEMAND
is still favored since it’s able to handle an increase of up to 49 percent of previous traffic/operations seen.