Message Queue 완벽 이해
비동기 처리의 핵심, 메시지 큐의 파티션, Consumer Group, 전달 보장을 학습합니다.
왜 알아야 하나요?
문제: 결제 완료 후 알림 발송이 느려요
결제 API가 알림 서버를 직접 호출하니, 알림이 느리면 결제도 느려져요.
해결: 메시지 큐로 분리!
결제는 "알림 보내줘" 메시지만 던지고 끝. 알림은 나중에 알아서 처리.
결과: 결제 응답 300ms → 50ms!
알림 서버 장애가 결제에 영향 X. 시스템 간 결합도 감소!
한눈에 보기
핵심 개념
Topic을 여러 개로 나눈 것. 병렬 처리의 단위
파티션 3개 → Consumer 최대 3개가 동시 처리 가능
같은 Key → 같은 파티션 → 순서 보장
그룹 내 Consumer들이 파티션을 나눠서 처리
Consumer가 죽으면? → 자동 리밸런싱
1 파티션 = 1 Consumer (그룹 내)
At-Most-Once: 유실 가능, 중복 없음
At-Least-Once: 유실 없음, 중복 가능
Exactly-Once: 트랜잭션 필요
메시지의 읽은 위치를 기록
Auto Commit: 자동 저장 (유실 위험)
Manual Commit: 처리 완료 후 저장
동기 vs 비동기
(모두 완료까지 기다림)
문제: 하나 느리면 전체가 느림
문제: 하나 장애면 전체 실패
(메시지만 던지고 끝)
장점: 결제는 빠르게 완료
장점: 장애 격리됨
직접 체험하기
파티션에 메시지를 발행하고, Consumer를 추가/제거하며 리밸런싱을 관찰하세요.
파티션별 메시지
같은 키는 같은 파티션으로 갑니다. 파티션이 많을수록 병렬 처리가 가능해요!
파티션: 병렬 처리의 단위. 파티션 수 = 최대 병렬 Consumer 수
Consumer Group: 그룹 내에서 파티션을 나눠 처리. 같은 메시지 중복 소비 방지
메시지 보장: 대부분 At-Least-Once + 멱등성으로 구현
더 알아보기
실무 적용
- • 주문 완료 후 알림/포인트/쿠폰
- • 로그 수집 파이프라인
- • 이벤트 소싱 아키텍처
Kafka 주요 설정
- • acks=all (복제 보장)
- • enable.auto.commit=false
- • max.poll.records=500