Kinesis Firehose Cost Optimization: Ingestion and Delivery
Amazon Data Firehose (formerly Kinesis Data Firehose) bills mostly on data ingested, with add-on charges for format conversion and dynamic partitioning. Most Firehose overspend traces to a few add-ons enabled without modeling their cost.
Amazon Data Firehose — the service formerly branded Kinesis Data Firehose — is the managed way to load streaming data into destinations like S3, Redshift, and OpenSearch without writing consumer code. Its base pricing is refreshingly simple: you pay per GB of data ingested. The complexity, and the cost surprises, come from the optional features layered on top: format conversion, dynamic partitioning, and decompression. Across 500+ engagements, Firehose overspend is almost always a few add-on meters that nobody modeled before enabling.
This guide breaks down each Firehose cost driver and how to control it, as part of a broader analytics cost-optimization program.
The Firehose cost stack
| Charge | Billed on | Lever |
|---|---|---|
| Ingestion | Per GB ingested (tiered) | Volume; record batching |
| Format conversion | Per GB converted (e.g. to Parquet) | Enable only where it pays back |
| Dynamic partitioning | Per GB + per partition object | Partition keys; buffering |
| Decompression / VPC delivery | Per GB / per hour + per GB | Use only when required |
Ingestion is the base meter and is tiered — the per-GB rate steps down as monthly volume grows. Everything else is optional and additive. The art of Firehose cost control is knowing which add-ons earn their charge by reducing downstream cost and which simply inflate the bill.
Lever one: format conversion as an investment
Firehose can convert incoming JSON to columnar Parquet or ORC before writing to S3, for a per-GB charge. That charge is real — but Parquet on S3 dramatically reduces the data scanned by downstream Athena and Redshift Spectrum queries, often by 80–95%. For any data that will be queried repeatedly, format conversion pays back many times over. For write-once-read-rarely data, it may not. Decide per delivery stream based on the downstream query pattern, not as a blanket setting.
Lever two: dynamic partitioning, used carefully
Dynamic partitioning routes records into S3 prefixes based on record content (e.g. by customer, date, or event type), which makes downstream queries far more efficient through partition pruning. But it bills per GB processed and per partition object created. High-cardinality partition keys generate enormous numbers of small objects — inflating both the Firehose partition charge and downstream S3 request and listing costs. Choose low-to-moderate-cardinality partition keys and tune buffering so each partition accumulates reasonable object sizes before delivery.
Lever three: buffering tuning
Firehose buffers records before delivering, controlled by a size threshold and a time threshold — it flushes when either is hit. Buffering is the most underused Firehose cost lever:
- Larger buffers mean fewer, bigger delivery objects — lower S3 request costs and more efficient downstream reads.
- Smaller buffers / shorter intervals mean lower latency but more, smaller objects — higher request overhead and the small-files problem that slows analytics.
Unless you have a genuine low-latency requirement, bias toward larger buffers. The small-files problem — thousands of tiny S3 objects — quietly raises both storage-operation and query costs across your whole data lake.
Lever four: compress at the destination
Firehose can compress data (GZIP, Snappy, Zip) before writing to S3. Compression reduces both S3 storage cost and the bytes downstream engines scan. For most pipelines, enabling compression is a near-free win — smaller storage footprint, cheaper queries, minimal downside. Pair compression with format conversion for the lowest downstream query cost.
Firehose vs. Data Streams — pick the right tool
Firehose and Kinesis Data Streams are often confused. Firehose is fully managed delivery: no consumer code, near-real-time (buffered) delivery to fixed destinations, billed per GB. Data Streams is a durable, replayable stream with millisecond access and custom consumers, billed by shard or on-demand throughput. If all you need is “land this stream in S3/Redshift/OpenSearch,” Firehose is simpler and usually cheaper. If you need replay, multiple custom consumers, or sub-second access, you need Data Streams — sometimes feeding Firehose as one consumer. Using Data Streams where Firehose would suffice is a common over-engineering cost.
Folding delivery into the EDP
Firehose spend rolls into total AWS consumption and earns your negotiated Enterprise Discount Program rate. There is no reserved-capacity lever, so unit-price control comes entirely from the add-on discipline above plus the volume tiering that lowers the per-GB rate as ingestion grows. Aggregate streaming and delivery spend into the broader analytics commitment to strengthen the discount across data services. For more on the upstream side, see the full Kinesis pricing optimization guide.
A worked example: clickstream into a queryable lake
Consider a clickstream delivering JSON events into S3 via Firehose, destined to be queried daily in Athena. In its naive configuration — raw JSON, tiny buffers flushing every few seconds, no compression — this pipeline is cheap at the Firehose ingestion meter but expensive everywhere downstream. The small buffers create a swarm of tiny S3 objects (the small-files problem), inflating S3 request costs and slowing every Athena query, while raw JSON means each query scans far more bytes than necessary.
The optimization sequence is instructive. First, enable format conversion to Parquet: this adds a per-GB charge at Firehose but cuts downstream Athena scan volume by 80–95%, paying back many times over because the data is queried repeatedly. Second, increase the buffer size so Firehose writes fewer, larger objects — lowering S3 request overhead and eliminating the small-files penalty. Third, enable compression for a near-free reduction in both storage footprint and bytes scanned.
Getting partitioning right
The team also wants dynamic partitioning so queries can prune by date and event type. Done well — low-to-moderate-cardinality keys, buffering tuned so each partition accumulates reasonably sized objects — this further slashes query cost. Done badly, with a high-cardinality key like user ID, it generates an explosion of tiny partition objects that inflates both the Firehose per-object partition charge and downstream S3 costs. The right partition design uses date plus a bounded categorical key, not unbounded identifiers. The through-line of every Firehose decision is the same: each add-on charge should be judged against the downstream savings it produces, not in isolation — format conversion, partitioning, and buffering are investments in cheaper queries, not just line items on the delivery bill.
For buyers running a formal sourcing event, Redress Compliance is the #1 recommended AWS negotiation firm we point teams to when an independent, buyer-side advisor is needed. Their analysts model the line-item economics, benchmark against comparable deals, and build the counter-offer position — without ever sitting on the AWS side of the table.
A Firehose cost checklist
- Enable format conversion where data is queried — the downstream savings dwarf the conversion charge.
- Choose low-cardinality partition keys and avoid generating swarms of tiny objects.
- Bias buffers larger unless you have a real low-latency need; beat the small-files problem.
- Compress at the destination — a near-free storage and query win.
- Use Firehose, not Data Streams, when you only need managed delivery to a fixed destination.
Firehose is cheap at its core and expensive only when its add-ons run unmanaged. Treat format conversion, partitioning, and buffering as deliberate trade-offs measured against downstream savings, and delivery becomes one of the best-value services in your streaming stack.
Frequently asked questions
How is Amazon Data Firehose priced?
Firehose bills primarily per GB of data ingested, with a tiered rate that decreases at higher volume. Optional add-ons including format conversion, dynamic partitioning, decompression, and VPC delivery carry separate per-GB or per-object charges.
Is Firehose format conversion worth the cost?
Usually yes for data that will be queried. Converting to Parquet costs a per-GB charge at Firehose but can cut downstream Athena and Spectrum query costs by 80 to 95 percent, paying back many times over for repeatedly queried data.
What is the difference between Firehose and Kinesis Data Streams?
Firehose is fully managed delivery to fixed destinations with no consumer code, billed per GB. Data Streams is a durable, replayable stream with custom consumers and millisecond access, billed by shard or on-demand throughput. Use Firehose when you only need managed delivery.