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_cluster is a managed Apache Kafka deployment. Two distinct flavors with different pricing:
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_node_group_info for instance type and count, ebs_volume_size for storage, and number_of_broker_nodes.
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_msk_cluster.
| Dimension | Unit | What's being charged |
|---|---|---|
| Broker hours | per broker per hour | Per-broker rate based on instance type. Multiplied by number_of_broker_nodes. $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_msk_cluster 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_mskconnect_connector) with per-MCU-hour pricing. c3x estimates it independently when declared.
Related resources
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_msk_cluster.