Use when it fits · AWS · Managed Apache Kafka

Amazon MSK (managed Kafka)

Apache Kafka, run by AWS inside the client's account. For when Kafka itself is the requirement, or when many consumers read a big stream. From about $560 a month before the first message.

Kafka is the stream most enterprises already run. Apache says more than 80% of the Fortune 100 use it (the project's own claim), and the reason isn't speed: Kinesis handles hundreds of MB a second too. It's three features and an ecosystem.

  • Compacted topics. Kafka can keep the latest value for every key for good, which is what event sourcing and Kafka Streams' state rely on. Kinesis only expires records by age.
  • Transactions across topics. An idempotent producer and transactions give exactly-once processing inside Kafka. Kinesis delivers at least once, and the consumer removes duplicates.
  • Consumer groups for free. Any number of groups read the same topic at their own pace, and adding one costs almost nothing. On Kinesis, every consumer pays per GB read, and enhanced fan-out stops at 20 consumers a stream.
  • The ecosystem. Kafka Connect and its connectors, Debezium's change data capture from Postgres, MySQL, SQL Server or Oracle, Kafka Streams and Flink, schema registries, and a protocol that every cloud, every on-premises data centre and many vendors speak.

I haven't run Kafka in production. Everything on this page is research and arithmetic, checked on 1 November 2026, and it's why I start with Kinesis on AWS: for a stream with a few consumers and no Kafka requirement, Kinesis is cheaper and has nothing to run. MSK earns its price when one of the four points above is the requirement, or when many consumers read a big stream for a long time. The numbers, with a chart of where the lines cross, are in Queue, bus or stream? and Kinesis or Kafka on AWS?

Three ways to buy it

Standard brokers Express brokers Serverless
What you size Brokers and their disks Brokers only; storage is pay-per-use Nothing
Smallest production cluster in Sydney 3 × kafka.m7g.large, about $558 a month 3 × express.m7g.large, about $1,117 a month About $684 a month before any data
Storage $0.12/GB-month on every broker (three copies); tiered storage $0.0652/GB-month (one copy) $0.12/GB-month (one copy), plus $0.0125 per GB written $0.12/GB-month, plus $0.125/GB in and $0.0625/GB out
Limits to know 16,384 GiB per broker; storage never shrinks 3 AZs and M7g only 200 MB/s in and 400 MB/s out per cluster; IAM only
Pick it when The default: cheapest at steady volume, with tiered storage for history You'd rather pay more than manage disks and scaling A small, irregular need that must speak Kafka

Sources, checked on 1 November 2026: Amazon MSK pricing and the AWS Price List for Sydney, MSK quotas.

Running Kafka yourself on EC2 isn't a fourth way I'd pick: on AWS it costs more than MSK once replication between AZs is counted, and you own every patch and broken broker (Kafka on EC2).

Use it when

  • Kafka itself is the requirement: compacted topics (the latest value per key, kept for good), transactions across topics, or an existing Kafka Connect, Debezium or Kafka Streams setup.
  • Many consumers reading the same big stream. Kafka's consumer groups cost nothing extra, where every Kinesis consumer pays per GB read: with ten consumers and a week of history, MSK is the cheapest stream from about 1,500 events a second.
  • Hybrid or multi-cloud: the Kafka protocol runs on-premises, on every cloud and inside many vendors' products.
  • A team that already knows and runs Kafka, or history kept longer than Kinesis's 365 days.

Don't use it when

  • Small or moderate volumes: the cluster costs about $560 a month before the first message. SNS, SQS or EventBridge cost a few dollars; Kinesis starts at about $14.
  • A stream with a few consumers and no Kafka requirement: Kinesis provisioned stays cheaper, even at 100 MB/s with three consumers.
  • Consumers that can't sit in the VPC: the brokers are private, so a Lambda reading them needs a VPC connection and a NAT gateway or PrivateLink.

Pricing

Sydney: 3 Standard brokers (kafka.m7g.large, $0.255 an hour each) about $558 a month, the production minimum. Broker storage $0.12/GB-month, provisioned on every broker (three copies); tiered storage $0.0652/GB-month (one copy). Express brokers $0.51 an hour each, plus $0.0125 per GB written and $0.12/GB-month stored. Serverless $0.9375 per cluster-hour (about $684 a month) plus $0.125/GB in and $0.0625/GB out. Replication between brokers is free; client traffic that crosses an AZ costs $0.01/GB on each side. Checked 1 November 2026.

Gotchas, with fixes

Gotcha: Client traffic that crosses an AZ is billed, $0.01/GB on each side in Sydney: with three AZs, two reads in three cross by default.

Fix: Turn on fetch-from-follower (the consumer's client.rack set to its AZ), so consumers read the replica in their own AZ. Replication between brokers is already free on MSK.

Gotcha: Broker storage only grows: auto-scaling raises it at most once every six hours, and it can never shrink.

Fix: Start small and keep history in tiered storage (one copy, $0.0652/GB-month), or use Express brokers, whose storage is pay-per-use.

Gotcha: A cluster on a Kafka version past its end of support is upgraded by AWS, at any time and without notice. Kafka 3.7 reached end of support on 1 September 2026.

Fix: Run 3.9 (AWS's recommended version) or 4.x, and plan each upgrade yourself before the end-of-support date.

Gotcha: T3 brokers are cheap (about $127 a month for three) and not for production: AWS says to test them under your load first.

Fix: Treat kafka.m7g.large as the production floor, and T3 as a development cluster.

Gotcha: MSK Serverless caps a cluster at 200 MB/s in and 400 MB/s out, accepts IAM authentication only, and per GB costs several times a provisioned cluster.

Fix: Keep Serverless for small, irregular Kafka needs; anything steady goes on Standard brokers.

Gotcha: A Lambda reading MSK in on-demand mode needs a NAT gateway or PrivateLink endpoints in the VPC (about $57 a month); provisioned mode bills its pollers at $0.231 an hour each (about $169 a month).

Fix: Budget the VPC plumbing with the cluster, and size provisioned pollers on the consumer lag you can accept.

Provisioning

Official Pulumi package · Official Terraform provider

aws.msk.Cluster (Express brokers: leave out storageInfo), aws.msk.ServerlessCluster and, since February 2026, aws.msk.Topic in @pulumi/aws; the same as aws_msk_cluster and aws_msk_topic in the hashicorp/aws provider. The Kafka provider (@pulumi/kafka) also manages topics and ACLs, but it must reach the brokers inside the VPC.

Instead, consider

  • Amazon Kinesis An ordered stream with a few consumers and no Kafka requirement: no brokers, IAM on every call, from about $14 a month.
  • Amazon SNS Each consumer needs each message once, at moderate volume: fan-out to SQS queues, from $0.
  • Kafka on EC2, run yourself Only for a Kafka version, plugin or setting MSK doesn't offer, with a team that already runs Kafka.

Decision guides

The concept behind it

Where it fits

  • Event-driven plumbing: Pick 06.

    Only when Kafka itself is required (compacted topics, transactions, Connect or Debezium), or many consumers read a big stream for a week or more.

Sources

Last reviewed by Nicolas Dao

Want this stack in your AWS account?

Cloudless Labs is a Sydney consultancy. We migrate on-premises systems to AWS, build serverless apps on this stack, and coach teams to ship with Claude Code and Codex.

Talk to us

Contact Us

For general inquiries, please contact us at:

For e-learning capabilities, please contact: