Choosing messaging: SQS, SNS, EventBridge (and Kafka or MQ)

Pick between SQS (pull queue), SNS (push fan-out) and EventBridge (event bus with content routing), or combine them — what each guarantees (ordering, duplicates, retention, retries), how they hand off to Lambda, the combinations that work (SNS→SQS fan-out, EventBridge→SQS buffer), the traps in each, and when Amazon MQ, MSK/Kafka or outside brokers fit instead.

markdownpatternv4R7G7-EFREstage: buildtrust: officialservice: sqsservice: snsservice: eventbridgeinterface: anySQS vs SNS vs EventBridgechoose messaging servicequeue vs topic vs event busfan-out patternevent-driven architecture AWSEventBridge vs SNSSQS FIFO vs SNS FIFOKafka MSK alternativeAmazon MQ RabbitMQdecision guide messagingbuffer Lambda with SQS

Created 18 Oct 2026 · Modified 23 Oct 2026 · 4 versions

Choosing messaging: SQS, SNS, EventBridge

Use SQS when one consumer must work through a backlog at its own pace. Use SNS when many subscribers each need a copy right away. Use EventBridge when events should be routed by their content, or come from AWS services, SaaS apps or other accounts. They combine well, and the most common shapes use two of them.

What each gives you

SQSSNSEventBridge
ModelQueue; consumers pullTopic; SNS pushes to subscribersEvent bus; rules route matching events to targets
Holds messagesUp to 14 days (default 4)No storage; retries deliveryNo storage on the bus; retries delivery
RetriesConsumer-driven: visibility timeout, then a DLQ after maxReceiveCountSQS/Lambda subscribers: 100,015 attempts over 23 days; then discarded unless the subscription has a DLQ24 h / 185 attempts by default; then dropped unless the target has a DLQ
FilteringNone on the queue (consumers decide; Lambda trigger filters exist)Subscription filter policies (attributes or body)Rich patterns on any field (reference/eventbridge/event-patterns.md)
OrderingFIFO queues, per message groupFIFO topics (+ SQS FIFO for strict order and deduplication)No ordering
DuplicatesStandard: possible. FIFO: deduplicated within 5 minutesStandard SQS subscribers get at-least-once, even from a FIFO topicRare duplicates documented
Max message1 MiBNot collected1 MB on event buses since 2026-01-29 (most Regions)
SourcesYour code, SNS, EventBridge, S3, …Your code, CloudWatch alarms, many AWS servicesAWS service events, CloudTrail API calls, SaaS partners, other accounts and buses, your code

The decision guide's wording on SNS "exactly-once" delivery conflicts with the SNS developer guide's at-least-once statement for standard subscribers. Design consumers to be idempotent with all three.

Shapes that work

ShapeWhenRead
Producer → SQS → LambdaBuffer bursts, cap concurrency, retry per messagepatterns/sqs-to-lambda.md
Producer → SNS → several SQS queues → consumersFan-out where every consumer has its own backlog and DLQpatterns/sns-to-sqs-fanout.md
AWS events / CloudTrail → EventBridge rule → SQS or LambdaReact to changes in your account (instance state, IAM changes)guides/eventbridge/route-events.md
Custom domain events → EventBridge bus → several targetsContent-based routing to many independent consumers; cross-account busessame
DynamoDB table → Streams → LambdaReact to item changes in order per keypatterns/dynamodb-streams-to-lambda.md
S3 → notification → SQS, SNS or LambdaObject-created workflowspatterns/s3-to-lambda.md

Put an SQS queue in front of slow or rate-limited consumers even when SNS or EventBridge is the router. Their retries are bounded, and a queue gives you a backlog you can inspect and redrive.

Traps

  • SNS and EventBridge discard after retries unless the subscription or target has a DLQ.
  • Service producers and KMS: SNS, EventBridge and S3 can't write to queues encrypted with aws/sqs. Use SSE-SQS or a customer managed key (reference/sqs/queue-settings-and-encryption.md).
  • Permissions live on the target:
  • queue policies (sqs:SendMessage for the service principal);
  • topic policies (sns:Publish);
  • Lambda resource policies (lambda:InvokeFunction).
  • Global-service events (IAM, Route 53) reach EventBridge only in us-east-1.

Other AWS options and outside brokers

AWS's application-integration decision guide also names Amazon MQ and Amazon MSK (Kafka). The hub doesn't cover either; read that guide before choosing them. Self-managed Kafka, RabbitMQ and other clouds' pub/sub services are named, not evaluated. Lambda can consume self-managed Kafka and MSK (OffsetLag metric, reference/cloudwatch/metrics-and-math.md).

Read this document as markdown — the same bytes an agent receives.