Amazon MQ Architecture
Architecture Diagram
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AMAZON MQ ARCHITECTURE β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β PRODUCERS β β
β β ββββββββββββ ββββββββββββ ββββββββββββ β β
β β β EC2 β β Lambda β β On-Prem β β β
β β β Apps β β β β Apps β β β
β β ββββββ¬ββββββ ββββββ¬ββββββ ββββββ¬ββββββ β β
β βββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββββββββββββββββ β
β βΌ βΌ βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β AMAZON MQ BROKER β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Engine Options β β β
β β β β β β
β β β βββββββββββββββββββ βββββββββββββββββββ β β β
β β β β ActiveMQ β β RabbitMQ β β β β
β β β β β β β β β β
β β β β β’ JMS 1.1/2.0 β β β’ AMQP 0-9-1 β β β β
β β β β β’ OpenWire β β β’ MQTT 3.1.1 β β β β
β β β β β’ STOMP β β β’ STOMP β β β β
β β β β β’ WebSocket β β β’ WebSocket β β β β
β β β β β’ Classic Queueβ β β’ Exchanges β β β β
β β β β β’ Conflation β β β’ Bindings β β β β
β β β βββββββββββββββββββ βββββββββββββββββββ β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Deployment Options β β β
β β β β β β
β β β Single Instance: $0.30/hr, 1 AZ, dev/test β β β
β β β Active/Standby: $0.60/hr, Multi-AZ, production β β β
β β β Cluster: $1.80/hr, 3 AZ, high availability β β β
β β β β β β
β β β Storage: EBS (GP2), 1 GB - 200 GB β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β CONSUMERS β β
β β ββββββββββββ ββββββββββββ ββββββββββββ β β
β β β EC2 β β Lambda β β ECS β β β
β β β Apps β β β β Tasks β β β
β β ββββββββββββ ββββββββββββ ββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ActiveMQ vs RabbitMQ Comparison
| Feature | ActiveMQ | RabbitMQ |
|---|---|---|
| Protocol | JMS, OpenWire, STOMP | AMQP, MQTT, STOMP |
| Message Model | Queue, Topic | Exchange, Queue |
| Routing | Simple | Complex (bindings) |
| clustering | Active/Standby | Quorum Queues |
| Management | Web Console | Management UI |
| Best For | Enterprise Java | Microservices |
Amazon MQ Configuration
import boto3
mq = boto3.client('mq')
# Create ActiveMQ broker
response = mq.create_broker(
BrokerName='data-pipeline-broker',
EngineType='ACTIVEMQ',
EngineVersion='5.17.6',
HostInstanceType='mq.m5.large',
DeploymentMode='ACTIVE_STANDBY_MULTI_AZ',
Users=[
{
'Username': 'admin',
'Password': 'SecurePassword123!',
'Groups': ['admin']
},
{
'Username': 'pipeline-user',
'Password': 'PipelinePass456!',
'Groups': ['users']
}
],
SecurityGroups=['sg-12345678'],
SubnetIds=['subnet-12345678', 'subnet-87654321'],
PubliclyAccessible=False,
AutoMinorEngineUpgrade=True,
StorageType='EBS',
SecurityPolicy='arn:aws:mq:us-east-1:123456789012:securitypolicy/MySecurityPolicy',
Logs={
'General': True,
'Audit': True
},
MaintenanceWindowStartTime={
'DayOfWeek': 'SUNDAY',
'TimeOfDay': '03:00',
'TimeZone': 'UTC'
},
Tags={'Environment': 'production', 'Team': 'data-engineering'}
)
broker_id = response['BrokerId']
print(f"Broker ID: {broker_id}")
Message Patterns
Architecture Diagram
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MESSAGE PATTERNS FOR DATA ENGINEERING β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β POINT-TO-POINT (Queue) β β
β β β β
β β Producer βββΊ Queue βββΊ Consumer (one message = one consumer) β β
β β β β
β β Use Case: Task distribution, work queues β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β PUBLISH-SUBSCRIBE (Topic) β β
β β β β
β β Publisher βββΊ Topic βββΊ Subscriber 1 β β
β β βββΊ Subscriber 2 β β
β β βββΊ Subscriber 3 β β
β β β β
β β Use Case: Event broadcasting, notifications β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β FAN-OUT (Exchange/Binding) β β
β β β β
β β Producer βββΊ Exchange βββΊ Queue 1 βββΊ Consumer A β β
β β β Queue 2 βββΊ Consumer B β β
β β β Queue 3 βββΊ Consumer C β β
β β β β
β β Use Case: Parallel processing, data distribution β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β REQUEST-REPLY β β
β β β β
β β Client βββΊ Request Queue βββΊ Server β β
β β Client βββ Reply Queue βββ Server β β
β β β β
β β Use Case: Synchronous processing, RPC β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Interview Questions & Answers
Q1: When should you use Amazon MQ vs. SQS/SNS?
Answer:
- Amazon MQ: Migrating from on-premises, existing JMS/AMQP apps
- SQS/SNS: New cloud-native applications, serverless
Amazon MQ is for existing message broker migrations. SQS/SNS are for new cloud-native designs.
Q2: What is the difference between ActiveMQ and RabbitMQ?
Answer:
- ActiveMQ: JMS-based, enterprise Java, Active/Standby HA
- RabbitMQ: AMQP-based, microservices, Quorum Queues HA
Choose based on your protocol requirements and existing codebase.
Q3: How does Amazon MQ handle high availability?
Answer:
- Active/Standby: 2 AZs, automatic failover
- Cluster: 3 AZs, quorum-based consensus
- Storage: EBS replication across AZs
- RTO: ~minutes for failover
Q4: What are the cost factors for Amazon MQ?
Answer:
- Broker instance hours (1.80/hr)
- Storage ($0.11/GB/month)
- Data transfer (standard AWS rates)
- No per-message charges
Q5: How do you monitor Amazon MQ?
Answer:
- CloudWatch metrics (CPU, memory, storage)
- Broker logs (General, Audit)
- JMX monitoring (ActiveMQ)
- Management UI (both engines)
- CloudTrail API logging
Summary
Amazon MQ is AWS's managed message broker service. Key takeaways:
- Engines: ActiveMQ (JMS) and RabbitMQ (AMQP)
- Deployment: Single, Active/Standby, Cluster modes
- Use Case: Migrating from on-premises message brokers
- Protocols: JMS, AMQP, MQTT, STOMP, OpenWire
- HA: Active/Standby (2 AZs) or Cluster (3 AZs)
- Cost: Per broker-hour + storage, no per-message fees