Apache Kafka 기본 개념 정리
1. kafka의 정의 및 특징
카프카는 대규모 데이터를 실시간으로 처리를 하기 위해 설계된 분산 이벤트 스트리밍 플랫폼이다.
| 특징 | 설명 |
|---|
| 메시지 브로커 | 서비스 간 데이터를 주고받을 때 중간에서 관리해주는 중개자 역할을 한다. |
| 고가용성 (HA) | 클러스터 내의 데이터를 복제(Replication)하여 특정 서버에 장애가 발생해도 서비스가 유지된다. |
| 비동기 처리 | Producer가 메시지를 보내고 Consumer가 응답할 때까지 기다리지 않아 시스템 성능이 향상된다. |
| 분산 시스템 | 여러 대의 서버(Broker)에 데이터를 분산 저장하여 확장성(Scale-out)이 뛰어나다. |
| 영속성 (Durability) | 데이터를 메모리가 아닌 디스크에 저장하며, 설정된 기간 동안 데이터를 보관한다. |
2. kafka의 주요 구성 요소
Broker (브로커)
- kafka 클러스터를 구성하는 개별 서버다.
- 데이터를 수신, 저장하고 consumer에게 전달하는 핵심 역할을 한다.
Topic & Partition (토픽과 파티션)
- Topic: 데이터가 저장되는 카테고리(이름표). (예:
user-login-logs)
- Partition: 하나의 토픽을 여러 개로 나눈 물리적인 저장 단위.
* partition을 통해 병렬 처리가 가능해지고, 데이터는 파티션 내에서 Offset 순서대로 저장된다.
Producer / Consumer (프로듀서 / 컨슈머)
- Producer: 메시지를 생성하여 특정 토픽으로 발행(Publish)하는 주체.
- Consumer: 토픽을 구독(Subscribe)하여 데이터를 가져와서 처리하는 주체.
- Consumer Group: 여러 consumper가 협력하여 하나의 토픽을 병렬로 처리할 수 있게 돕는 단위.
3. 왜 대용량 시스템에서 kafka를 사용할까?
대용량 시스템에서 kafka가 필수적인 이유는 아래와 같다.
- 압도적인 처리량 (High Throughput)
- 일반적인 메시지 큐와 달리 디스크 순차 쓰기(Sequential I/O)와 Zero-copy 기술을 사용하여 초당 수백만 건의 데이터를 처리할 수 있다.
- 느슨한 결합 (Decoupling)
- 데이터를 보내는 곳과 받는 곳이 서로의 존재를 몰라도 된다. kafka가 중간 큐 역할을 해주므로 시스템 간 의존성이 낮아진다.
- 데이터 유실 방지
- 데이터를 디스크에 물리적으로 저장하고 복제본을 유지하기 때문에, 갑작스러운 서버 다운에도 데이터가 안전하게 보존된다.
- 유연한 확장성
- 트래픽이 늘어나면 브로커 서버를 추가하거나 파티션을 늘리는 방식으로 아주 쉽게 성능을 확장할 수 있다.