본문 바로가기
DEV Heart

메세징! Kafka vs SQS

by 로띠 2026. 3. 17.

1. Kafka vs SQS 핵심 비교

항목 Kafka SQS
메시지 보존 소비 후에도 retention 기간까지 보존 소비하면 삭제
컨슈머 여러 컨슈머 그룹이 같은 메시지를 독립 소비 하나의 컨슈머가 가져가면 끝
fanout은 SNS+SQS 조합 필요
순서 보장 파티션 단위 보장 Standard: 없음 / FIFO: 있으나 처리량 제한
처리량 초당 수십만~수백만 건 거의 무제한이나 건당 비용 발생
비용 모델 인프라 운영 비용 (브로커 수 기반) 요청 수 기반 과금 (API call 당)
운영 부담 직접 운영 또는 MSK 완전 관리형, 운영 부담 없음
재처리 (replay) offset 되감기로 재처리 가능 불가 (DLQ로 실패건만 재처리)

2. 언제 뭘 쓸까

Kafka가 유리한 경우

  • 같은 로그를 여러 곳에서 소비해야 할 때 (모니터링, 분석, 알림 등)
  • 장애 시 offset 되감기로 재처리가 필요할 때
  • 로그 볼륨이 커서 건당 과금이 부담될 때

SQS가 유리한 경우

  • 컨슈머가 하나이고 단순히 받아서 처리만 하면 될 때
  • 브로커 운영 부담을 없애고 싶을 때
  • 로그 볼륨이 적어서 건당 과금이 부담 없을 때

3. 다중 컨슈머 구조 비교

Kafka는 메시지를 소비해도 삭제하지 않기 때문에 컨슈머 그룹별로 각자의 offset을 관리하면서 같은 메시지를 독립적으로 읽을 수 있다.

Kafka

[Airflow DAG 로그] → Kafka topic: "dag-logs"
                        ├─ 컨슈머 그룹 A: ELK 적재
                        ├─ 컨슈머 그룹 B: Slack 알림
                        └─ 컨슈머 그룹 C: 메트릭 집계
세 그룹 모두 동일한 메시지를 각자 소비한다. A가 읽었다고 B가 못 읽는 게 아니다.

SQS로 같은 구조를 만들려면

[로그] → SNS → SQS-A (ELK)
              → SQS-B (Slack)
              → SQS-C (메트릭)
SNS fanout + 큐 N개 구성이 필요하다. 컨슈머가 늘어날 때마다 SQS 큐를 추가하고 SNS 구독을 연결해야 한다.

4. 결론

로깅 중앙 집중화는 보통 다중 컨슈머(ELK 적재, Slack 알림, 메트릭 집계 등)가 필요하고 장애 시 재처리 가능성도 있어서 Kafka가 자연스러운 선택이다. SQS로 동일한 구조를 만들려면 SNS → 여러 SQS fanout 구성이 필요해서 오히려 복잡해진다.

다만 컨슈머가 하나뿐이고 볼륨이 적다면, 운영 부담 없는 SQS가 합리적일 수 있다.

'DEV Heart' 카테고리의 다른 글

분산락 DistributedLock  (1) 2026.03.17
Object랑 T로 받았을떄 무슨 차이야?  (2) 2025.06.30
Elastic search  (0) 2023.06.23
javax.validation @어노테이션  (0) 2021.12.27
초간단 Spring 프로젝트 생성 + dependencies 추가  (0) 2021.12.20