본문 바로가기

개발/백엔드

Kafka 기본 개념과 구조

 

1. 카프카 어디에 쓸까?

실시간, 대용량 처리, 분석 등 사용처가 무궁무진하다

ex) 실시간 추천 시스템, 이상 탐지, 모니터링, 재고 관리, 로깅, 분석 등..

 

1) EDA에서 느슨한 결합을 위해 사용
- MSA 간 데이터 동기화
- 서비스 간 의존성 제거
- 확장성 있는 시스템 구축

 

2) 실시간 데이터 파이프라인
- 로그 중앙 집중화
- 실시간 데이터 분석
- 대용량 데이터 이동 (ETL)

 

3) 메시징 큐
- 비동기 처리
- 트래픽 피크 완화
- 안정적인 데이터 전달 보장

 

2. 기본 개념과 구조

[프로듀서]    [카프카 클러스터]       [컨슈머]
     ↓             ↓                  ↓
애플리케이션 → 토픽/파티션/브로커 → 애플리케이션

[Kafka Cluster]
├── Broker 1
│   ├── Topic-Order
│   │   ├── Partition 0 (Leader)
│   │   ├── Partition 1 (Follower)
│   │   └── Partition 2 (Follower)
│   │
│   └── Topic-Payment
│       ├── Partition 0 (Leader)
│       └── Partition 1 (Follower)
│
└── Broker 2
    ├── Topic-Order
    │   ├── Partition 0 (Follower)
    │   ├── Partition 1 (Follower)
    │   └── Partition 2 (Leader)
    │
    └── Topic-Payment
        ├── Partition 0 (Follower)
        └── Partition 1 (Follower)

 

Topic

- 메시지를 구분하는 논리적 단위

 

Partition

- Topic을 분할한 물리적 단위

- 병렬 처리와 확장성 제공

- 메시지 순서는 파티션 내에서만 보장

 

Producer
- 메시지 생산

- 메시지 키 기반 파티션 할당
- acks, 압축, 배치 처리 등 설정 가능

 

Consumer

- Consumer Group으로 구성


- 파티션당 하나의 Consumer만 할당
- Offset으로 메시지 위치 관리

 

3. 프로듀서와 컨슈머, 파티션 숫자 조정?

파티션 : 컨슈머 비율
- 하나의 파티션은 같은 Consumer Group 내에서 하나의 Consumer만 처리 가능
- 파티션 수가 Consumer 수의 상한선

[3개 파티션일 때 가능한 Consumer 수]
├── 1개 Consumer: P0,P1,P2 → Consumer1
├── 2개 Consumer: P0,P1 → Consumer1 / P2 → Consumer2
└── 3개 Consumer: P0 → Consumer1 / P1 → Consumer2 / P2 → Consumer3
- 4개 Consumer: 불가능 (한 Consumer는 놀게 됨)

Producer 개수
- 파티션 수와 직접적인 제한 관계 없음
- 동시에 여러 Producer가 메시지 발행 가능
- 같은 key를 가진 메시지는 같은 파티션으로 감

[Producer 동작 방식]
Producer 1 ─┐
Producer 2 ─┼→ Topic (파티션들)
Producer 3 ─┘

권장 설정
[파티션 수 결정]
처리량 기준:
- 낮은 처리량: 3개 파티션
- 중간 처리량: 6개 파티션
- 높은 처리량: 9개 이상 파티션

[Consumer 수 결정]
- 시작: 파티션 수와 동일하게
- 처리지연 발생시 파티션 수++ 컨슈머 수++

 

'개발 > 백엔드' 카테고리의 다른 글

Spring Circuit Breaker  (0) 2024.12.30
Spring Rate Limiter  (1) 2024.12.26
Spring Kafka 기본 설정 및 실행  (2) 2024.12.25
Spring Redis - SortedSet으로 대기열 만들기  (1) 2024.12.23
Spring Redis 기본 설정  (1) 2024.12.23