System DesignKafka시뮬레이션

Message Queue 완벽 이해

비동기 처리의 핵심, 메시지 큐의 파티션, Consumer Group, 전달 보장을 학습합니다.

왜 알아야 하나요?

문제: 결제 완료 후 알림 발송이 느려요

결제 API가 알림 서버를 직접 호출하니, 알림이 느리면 결제도 느려져요.

해결: 메시지 큐로 분리!

결제는 "알림 보내줘" 메시지만 던지고 끝. 알림은 나중에 알아서 처리.

결과: 결제 응답 300ms → 50ms!

알림 서버 장애가 결제에 영향 X. 시스템 간 결합도 감소!

한눈에 보기

Producer
메시지 발행
Topic
파티션으로 분배
Consumer Group
분산 처리

핵심 개념

파티션 (Partition)

Topic을 여러 개로 나눈 것. 병렬 처리의 단위

파티션 3개 → Consumer 최대 3개가 동시 처리 가능

같은 Key → 같은 파티션 → 순서 보장

Consumer Group

그룹 내 Consumer들이 파티션을 나눠서 처리

Consumer가 죽으면? → 자동 리밸런싱

1 파티션 = 1 Consumer (그룹 내)

메시지 전달 보장

At-Most-Once: 유실 가능, 중복 없음

At-Least-Once: 유실 없음, 중복 가능

Exactly-Once: 트랜잭션 필요

Offset

메시지의 읽은 위치를 기록

Auto Commit: 자동 저장 (유실 위험)

Manual Commit: 처리 완료 후 저장

동기 vs 비동기

동기 호출 (직접)
결제 → 알림 → 포인트 → 쿠폰
(모두 완료까지 기다림)

문제: 하나 느리면 전체가 느림

문제: 하나 장애면 전체 실패

비동기 (메시지 큐)
결제 → MQ → 알림/포인트/쿠폰
(메시지만 던지고 끝)

장점: 결제는 빠르게 완료

장점: 장애 격리됨

직접 체험하기

파티션에 메시지를 발행하고, Consumer를 추가/제거하며 리밸런싱을 관찰하세요.

메시지 큐 상태

파티션별 메시지

0
발행
0
소비
0
대기 중
0
Consumer
파티션과 메시지 분배

같은 키같은 파티션으로 갑니다. 파티션이 많을수록 병렬 처리가 가능해요!

파티션 수3
메시지 수50
유니크 키 수5
핵심 교훈

파티션: 병렬 처리의 단위. 파티션 수 = 최대 병렬 Consumer 수

Consumer Group: 그룹 내에서 파티션을 나눠 처리. 같은 메시지 중복 소비 방지

메시지 보장: 대부분 At-Least-Once + 멱등성으로 구현

더 알아보기

실무 적용

  • • 주문 완료 후 알림/포인트/쿠폰
  • • 로그 수집 파이프라인
  • • 이벤트 소싱 아키텍처

Kafka 주요 설정

  • • acks=all (복제 보장)
  • • enable.auto.commit=false
  • • max.poll.records=500