Caylent Catalysts™
IoT
Connect, understand, and act on data from industrial devices at scale to improve uptime, efficiency, and reliability across manufacturing, energy, and utilities.
Compare Amazon Kinesis Data Streams on-demand vs. provisioned pricing. See at what utilization levels provisioned mode saves money based on payload size and throughput.
This blog was originally written and published by Trek10, which is now part of Caylent.
When AWS released on-demand billing for Amazon Kinesis Data streams in Nov 2021, pitching it as “serverless,” my first thought was: isn’t Kinesis Data Streams more or less already serverless? Yes, there is an hourly cost per shard-hour in provisioned mode but when you are using more than 30% of the shard’s capacity the per-request cost is more than the shard-hour cost. A “true” serverless offering would mean that cost and usage are perfectly correlated. That is, zero usage would equate to zero cost—the amount of money you pay to use a serverless offering is purely determined by your actual usage of the service. Because Kinesis Data Streams’ cost [when using provisioned streams] is primarily determined by the per-request cost after shard utilization exceeds 30% (and we can expect that many real-world scenarios will involve > 30% shard utilization), we can say that the service is already almost serverless with respect to its billing model. With this in mind, let’s explore the cost differences between the new serverless billing mode for Kinesis Data streams when compared against the existing “almost serverless” provisioned mode.
The pricing structure (prices from us-east-1) between provisioned and on-demand streams has these differences:
On-demand scales to double your peak write throughput in the previous 30 days. It doesn’t scale based on your reads. Also if you increase above double your peak usage within 15 minutes you can still get throttles. Hot shards can still be a problem since on-demand scaling mode doesn’t isolate specific hash keys. With provisioned mode, you have to specify the number of shards you want. You can scale a provisioned mode stream up or down by a factor of two. There is unfortunately no AWS built-in way to scale provisioned mode streams (e.g. Application Auto scaling doesn’t support Amazon Kinesis Data streams).
Reading data twice would favor on demand, comparing the cost of enhanced fanout is beyond the scope of this analysis.
Here are some graphs showing the cost vs. utilization rate for provisioned streams. Each graph also shows the cost for processing the same data in an on-demand stream. All the graphs show the cost for reading the written data once.* Since the payload size affects the pricing we have graphs for 100 byte, 1kb, 25kb, and 100kb payloads. (Because the provisioned streams have 25kb metering but the on-demand only has 1kb, the payload size will affect the price differently in the two modes. Generally, larger payloads favor provisioned streams since it has a larger metering size).
The cost shown in these graphs for provisioned mode is based on 100 shards and the per-record cost at the utilization rate on the x-axis. The cost for the on-demand mode is based on sending the equivalent data through an on-demand stream. Based on these graphs we can see that the cost starts favoring provisioned mode around when utilization is over 5%.
Based on the 5% utilization break-even point seen above, we can compare the two billing modes at various request sizes and request rates. The following graphs show the cost for provisioned and on-demand mode at various requests per second. The number of shards for provisioned mode cost is set such that only 5% of the stream’s capacity is used.
The four graphs from above show us that at 5% utilization, the provisioned mode is cheaper for all but the 100-byte payload size. Generally larger payload sizes favor provisioned mode because of the difference in rounding of the payload sizes: 1kb vs. 25kb respectively for on-demand and provisioned mode.
Let’s consider the following utilization scenarios to see which billing mode would be cheaper:
To measure the utilization rate of on-demand streams take the maximum value of the following two formulas:
(Sum(IncomingBytes) / Period) / (Number of shards * 1000000)(Sum(IncomingRecords) / Period) / (Number of shards * 1000)Where Period is the number of seconds specified in the CloudWatch Get Metric Statistics API call or in the CloudWatch Console. (Each shard can support 1mb/sec or 1000 records/sec, so we need to calculate both the utilization rate for bytes per second and utilization rate for records per second and take the maximum to find the rate that will limit the stream first)
Founded in 2013, Trek10 helped organizations migrate to and maximize the value of AWS by designing, building, and supporting cloud-native workloads with deep technical expertise. In 2025, Trek10 joined Caylent, forming one of the most comprehensive AWS-only partners in the ecosystem, delivering end-to-end services across strategy, migration and modernization, product innovation, and managed services.
View Trek10's articlesCaylent Catalysts™
Connect, understand, and act on data from industrial devices at scale to improve uptime, efficiency, and reliability across manufacturing, energy, and utilities.
Caylent Services
Reliably Operate and Optimize Your AWS Environment
Caylent Services
Quickly establish an AWS presence that meets technical security framework guidance by establishing automated guardrails that ensure your environments remain compliant.
Build a serverless data warehouse on AWS by streaming Amazon DynamoDB data to Amazon S3 with AWS Lambda. A cost-effective architecture for historical analytics and business reporting.
Scale Amazon Kinesis Data Streams with low-cardinality partition keys using UpdateShardCount, manual shard splitting, and explicit hash values to balance traffic across shards.
Optimize Amazon Kinesis consumers with Parallelization Factor and Enhanced Fan Out. Learn how to scale Lambda processing per shard and overcome multi-consumer read limits.