Какая разница между SQS и MSK в AWS?

«Какая разница между SQS и MSK в AWS?» — вопрос из категории Облачные платформы, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Это принципиально разные сервисы для разных паттернов обмена сообщениями.

Аспект Amazon SQS (Simple Queue Service) Amazon MSK (Managed Streaming for Kafka)
Модель Очередь сообщений (Message Queue). Одно сообщение — один потребитель (в стандартной очереди). Потоковый брокер (Streaming Platform). Сообщения публикуются в топики, множество потребителей могут читать топик.
Паттерн доставки Pull-based (потребитель опрашивает очередь). Сообщение удаляется после успешной обработки. Push/Pull-based. Потребители управляют своим offset и могут перечитывать сообщения.
Гарантия порядка Стандартная очередь: нет гарантии. FIFO-очередь: строгий порядок в пределах группы сообщений. Гарантируется в пределах партиции. Ключ сообщения определяет партицию.
Масштабирование Полностью managed, автоматически масштабируется. Управляемый, но вы выбираете тип и количество брокеров/зукеперов, масштабируете вручную.
Использование в DevOps Декoupling и асинхронная обработка задач. Например, запуск задачи в CI/CD после события, отложенная обработка данных. Потоковая обработка событий в реальном времени. Например, агрегация логов с множества сервисов, потоковая ETL, event sourcing архитектура.

Пример использования SQS для отказоустойчивости:

# producer.py - Сервис помещает задачу в очередь
import boto3
sqs = boto3.client('sqs', region_name='us-east-1')
response = sqs.send_message(
    QueueUrl='https://sqs.us-east-1.amazonaws.com/123/backup-queue',
    MessageBody=json.dumps({'bucket': 'prod-logs', 'key': 'app.log.2023.gz'})
)
# consumer.py - Отдельный воркер-процесс обрабатывает задачи
messages = sqs.receive_message(QueueUrl=queue_url, MaxNumberOfMessages=10)
for msg in messages.get('Messages', []):
    process_backup(json.loads(msg['Body']))
    sqs.delete_message(QueueUrl=queue_url, ReceiptHandle=msg['ReceiptHandle'])

Вывод: SQS — это простая, надёжная и недорогая очередь для задач. MSK — это мощная платформа для построения event-driven архитектур и сложной потоковой обработки.