πŸŽ‰ 75% of content is free forever β€” Unlock Premium from $10/mo β†’
CW
Search courses…
πŸ’Ό Servicesℹ️ Aboutβœ‰οΈ ContactView Pricing Plansfrom $10

Amazon MQ for Data Engineers

AWS Data EngineeringAmazon MQ Message Brokering⭐ Premium

Advertisement

πŸ“¨ Amazon MQ

Master Amazon MQ message brokering with ActiveMQ and RabbitMQ for data engineering.

Module: AWS Data Engineering β€’ Topic 15 of 65 β€’ Premium Content

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

FeatureActiveMQRabbitMQ
ProtocolJMS, OpenWire, STOMPAMQP, MQTT, STOMP
Message ModelQueue, TopicExchange, Queue
RoutingSimpleComplex (bindings)
clusteringActive/StandbyQuorum Queues
ManagementWeb ConsoleManagement UI
Best ForEnterprise JavaMicroservices

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 (0.30βˆ’0.30-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

Advertisement