# Throughput tier decision matrix (AWS)

Pick the **messaging/streaming tier** by sustained ingest TPS, ordering requirements,
consumer fan-out, and retention — not by defaulting to Kafka because the resume says Kafka.

> Capabilities reflect **June 2026** us-east-1 list pricing and AWS-documented limits.
> Verify FIFO high-throughput mode opt-in, Kinesis on-demand scaling, and MSK Serverless
> ceilings in your region before procurement.

## 1. "What is the sustained ingest rate?"

| Sustained ingest | Ordering required? | Default tier | Escalate when |
|------------------|-------------------|--------------|---------------|
| &lt; 3k msg/s | No | **SQS Standard** | Never for throughput alone — tune consumers |
| &lt; 3k msg/s | Yes (per entity) | **SQS FIFO** (message groups) | Plateau at **300 TPS** per API action → enable batching (3k) or **high-throughput FIFO** (70k) |
| 3k–50k msg/s, &lt; 1 MB/s per logical stream | Per-shard order OK | **Kinesis Data Streams** (on-demand) | Hot shard / `ProvisionedThroughputExceeded` → add shards or switch provisioned mode |
| 50k+ msg/s or &gt; 500 MB/s sustained | Kafka protocol / Connect | **MSK provisioned** (+ RIs at scale) | MSK Serverless caps (~200 MBps write / 400 MBps read per cluster) |
| Stateful windows, joins, CEP | N/A | **Managed Service for Apache Flink** | Kinesis/MSK is transport; Flink is compute |

**Opinionated default:** **SQS Standard** for job queues; **Kinesis on-demand** for AWS-native fan-out to Lambda; **MSK** only when Kafka clients, Connect, or compacted topics are non-negotiable.

## 2. "When NOT to escalate tier"

| Situation | Stay on current tier |
|-----------|---------------------|
| Spike is 10× for &lt; 5 minutes | SQS absorption + autoscaling consumers |
| You need strict global order across all messages | Neither SQS FIFO nor single-shard Kinesis scales — redesign domain boundaries |
| "We might need Kafka someday" | SQS + EventBridge until Connect requirement is dated in a decision record |
| Fan-out is 2–3 Lambdas | EventBridge or SNS → SQS, not Kinesis |

## 3. Consumer parallelism rules

| Tier | Parallelism knob | Pitfall |
|------|------------------|---------|
| SQS Standard | More consumers (idempotent handlers) | Duplicate delivery — not a bug |
| SQS FIFO | More **message group IDs** | Single group = single lane |
| Kinesis | More shards OR enhanced fan-out consumers | Standard consumers share 2 MB/s read/shard |
| MSK | More partitions + consumer group members | Rebalance storm on deploy |
| Flink | Parallelism / task slots | State size grows with key cardinality |

## 4. Cost signals

Use [throughput-cost-model.csv](./throughput-cost-model.csv) — wrong-tier rows
(FIFO without high-throughput at 8k TPS, Kinesis shard under-provision) dominate
surprise bills more than per-million request rates.

## Related posts

- [High-throughput event processing tier selection](/blog/aws-high-throughput-event-processing-tier-selection-2026/)
- [Kinesis vs MSK](/blog/amazon-kinesis-data-streams-vs-msk-which-streaming-platform/)
- [Event-driven async boundaries](/blog/aws-event-driven-async-messaging-boundaries/)
- [SQS pricing 64 KB rule](/blog/amazon-sqs-pricing-64kb-rule-fifo-vs-standard/)
