aws_ msk_ cluster cost estimation
A managed Apache Kafka cluster. Priced per broker-hour by instance type, plus EBS storage per GB-month and data transfer.
An aws_
MSK Provisioned (the default): you provision broker count and instance type. Pricing has three parts.
Broker hours: each Kafka broker is billed per hour by instance type. kafka.m7g.large is $0.211/hour. A standard 3-broker production cluster is ~$462/month for compute alone.
EBS storage: each broker has attached EBS gp3 storage, billed at $0.10/GB-month. A typical 1 TB per broker × 3 brokers = $300/month in storage.
Data transfer: broker-to-broker replication within the cluster is free. Producer/consumer traffic from outside the VPC incurs standard egress rates. Cross-AZ traffic within the VPC is free for in-VPC clients but counts for cross-AZ resources.
MSK Serverless: pay-per-use model with no broker provisioning. Billed per cluster-hour plus per GB written and per GB read. Right for unpredictable or low-baseline workloads. Caps at 200 GB/s total throughput.
Practical cost drivers: broker count (production needs 3 for quorum), per-broker storage (Kafka retention windows directly multiply storage), and cross-AZ data transfer (replication factor 3 doubles or triples inter-AZ traffic).
c3x reads broker_
Terraform example
A minimal but realistic configuration that C3X can estimate.
resource "aws_msk_cluster" "events" {
cluster_name = "production-events"
kafka_version = "3.7.x"
number_of_broker_nodes = 3
broker_node_group_info {
instance_type = "kafka.m7g.large"
client_subnets = aws_subnet.private[*].id
storage_info {
ebs_storage_info {
volume_size = 1000
}
}
security_groups = [aws_security_group.msk.id]
}
encryption_info {
encryption_in_transit {
client_broker = "TLS"
in_cluster = true
}
}
}Pricing dimensions
What you actually pay for when you provision aws_.
| Dimension | Unit | What's being charged |
|---|---|---|
| Broker hours | per broker per hour | Per-broker rate based on instance type. Multiplied by number_ $0.211/hour for kafka.m7g.large in us-east-1 |
| EBS storage per broker | per GB-month | gp3 storage per broker. Multiplied by broker count. $0.10/GB-month |
| MSK Serverless cluster | per cluster per hour | MSK Serverless flavor: per-cluster fee plus throughput-based charges. $0.75/hour |
| MSK Serverless data written | per GB | Producer traffic to a Serverless cluster. $0.10/GB |
| MSK Serverless data read | per GB | Consumer traffic from a Serverless cluster. $0.05/GB |
| Cross-AZ data transfer | per GB | Replication and consumer traffic crossing AZs. Not free even within the same VPC. |
Optimization tips
Common ways to reduce aws_ cost without changing the workload.
Use Graviton brokers (kafka.m7g, kafka.t3g)
10-20%Graviton-based broker instances are 10-20% cheaper than equivalent Intel sizes with similar Kafka throughput. Switching kafka.m5.large to kafka.m7g.large saves about $20/month per broker.
Use Tiered Storage for long retention
Up to 75% on storageMSK Tiered Storage moves older log segments to S3 transparently. Per-GB cost drops from $0.10 (EBS) to ~$0.025 (S3). Right for workloads with multi-day or multi-week retention.
Right-size broker count
Per-broker costMinimum is 1 broker; production typically uses 3 for replication. More than 3 only if you need higher throughput or partition count. Each additional broker is full-cost.
Consider MSK Serverless for low-baseline workloads
Workload-dependentMSK Serverless has higher per-GB cost but no fixed broker bills. For workloads with sustained throughput below ~10 MB/s, Serverless is cheaper than provisioned.
Set short retention for non-essential topics
Storage proportional to retentionDefault Kafka retention is 7 days. For ephemeral topics (cache invalidation, ephemeral events), 24 hours is plenty. Lower retention means lower storage requirement, smaller volumes.
FAQ
MSK vs self-managed Kafka on EC2?
MSK is roughly 30-40% more expensive than equivalent self-managed Kafka but eliminates significant operational burden (cluster management, upgrades, monitoring, failover). For teams without dedicated Kafka operators, MSK usually pays for itself.
Provisioned or Serverless?
Provisioned: predictable workloads above ~10 MB/s sustained. Lower per-GB cost at high volumes. Serverless: variable workloads, occasional bursts, infrequent use. No cluster sizing. Higher per-GB cost but no fixed broker fees.
Does c3x include cross-AZ data transfer?
MSK clusters replicate across AZs by default. Cross-AZ traffic is usage-based; specify in c3x-usage.yml if your workload has high cross-AZ producer/consumer traffic.
What about MSK Connect?
MSK Connect (managed Kafka Connect) is a separate resource (aws_
Related resources
More AWS resources
Further reading
- MSK vs Kinesis cost: the broker floor that decides it
Kinesis scales down to a single shard with no real floor; MSK runs brokers 24/7 ($400+/month for a 3-broker cluster). Here's the crossover by throughput and the Kafka-ecosystem angle.
- Kafka cost optimization: brokers, storage, and managed vs self-hosted
Kafka cost is the broker compute, the storage of retained messages, cross-AZ replication transfer, and (if managed) the service premium. Retention, right-sized brokers, and tiered storage cut it. Here is how.
- Kafka vs Kinesis cost: streaming pricing models compared
Self-managed Kafka, MSK, and Kinesis price streaming very differently: broker instances plus replication transfer versus shards or throughput units. The cheapest choice depends on throughput, retention, and how much operational work you want. Here is the breakdown.
- AWS Kinesis Data Firehose cost: per GB ingested, plus conversions
Firehose charges about $0.029 per GB ingested (first 500 TB/month), with extra for format conversion and VPC delivery. Cost tracks data volume, so batching and compression before ingest are the main levers. Here is the breakdown.
Estimate this resource in your own Terraform
Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including aws_.