Phase 2레슨 8
Message Queue
Producer, Consumer, Topic, Partition, Offset, Kafka, DLQ
💡ELI5·
Kafka를 우체물 분류 센터에 비유하면
Producer → Topic (Partition 0,1,2) → Consumer Group
각 Partition 담당💡 비유 — Kafka = 우체물 분류 센터. Producer = 편지 보내는 사람, Topic = 목적지별 분류함, Partition = 컨베이어 벨트 라인, Consumer Group = 배달팀. 한 라인은 한 배달원이 전담하므로 순서가 꼬이지 않는다.
🔬Deep Dive·
Topic, Partition, Offset
| 개념 | 설명 | 비유 |
|---|---|---|
| Topic | 메시지의 논리적 채널 (예: orders) | 분류함 |
| Partition | Topic의 물리적 분할, append-only 로그 | 컨베이어 벨트 라인 |
| Offset | Partition 내 메시지의 순번 | 배달 번호 |
| Consumer Group | Partition을 분담하는 Consumer 집합 | 배달팀 |
| Broker | Kafka 클러스터의 노드 | 우체국 |
🔬Deep Dive·
Delivery Semantics
| Semantic | 보장 | 구현 방법 | 주의점 |
|---|---|---|---|
| At-most-once | 최대 1회 (유실 가능) | ack 없이 전송 | 메시지 유실 허용 시 |
| At-least-once | 최소 1회 (중복 가능) | ack + 재시도 | Consumer 멱등성 필수 |
| Exactly-once | 정확히 1회 | 트랜잭션 + idempotent Producer | 성능 저하, 복잡성 |
⚖️Trade-off·
비동기 메시징의 Trade-off
| 이점 | 대가 |
|---|---|
| Producer/Consumer 분리 (느슨한 결합) | 디버깅 어려움 (분산 추적 필요) |
| 트래픽 스파이크 완충 (버퍼 역할) | 메시지 지연 (실시간 보장 안 됨) |
| 개별 확장 (Consumer 추가만 하면 됨) | 순서 보장 복잡 (Partition 설계) |
| 장애 격리 (Consumer 죽어도 Producer 정상) | 중복 처리 가능 (멱등성 필요) |
❓ 체크포인트 질문
- 1.Kafka에서 Partition이 순서 보장에 어떤 역할을 하는가?
- 2.Consumer Group의 역할은?
- 3.Dead Letter Queue(DLQ)가 필요한 이유는?
- 4.At-least-once와 At-most-once delivery의 차이는?
- 5.메시지 큐가 서비스 간 결합을 어떻게 느슨하게 만드는가?