[Kafka] Kafka의 개념 이해 및 redis와 비교
요즘 실시간 데이터 처리나 대용량 로그 시스템을 설계할 때 Kafka를 자주 마주치게 된다.
하지만 Kafka가 정확히 무엇을 위한 도구인지, 또 Redis와는 어떤 관계인지에 대해 처음엔 감이 잘 안 와서 이번 글을 통해 Kafka의 등장 배경부터 개념, 아키텍처, 그리고 Redis와의 조합까지 정리해보려고 한다.
📌 Kafka의 개발 배경
Kafka는 원래 LinkedIn에서 내부 로그 수집 시스템을 개선하기 위해 개발되었다.
이전에는 다음과 같은 문제점들이 있었다.
- 각 애플리케이션이 직접 로그나 이벤트를 다른 시스템으로 전달해야 했음 → 중복 로직 발생
- 실시간 분석, 모니터링, ETL 등 다양한 파이프라인마다 별도 설계 필요
- 시스템 간의 데이터 이동에서 신뢰성과 확장성 부족
- 대량의 데이터를 안정적으로 처리할 중앙 메시지 허브가 없었음
💡 Kafka의 해결 방향
Kafka는 이런 문제를 해결하기 위해 다음과 같은 목표를 가지고 설계되었다:
- 고속 처리 (High Throughput)
- 내구성 보장 (Durability)
- 수평 확장성 (Horizontal Scalability)
- 분산 아키텍처 (Distributed Architecture)
- 다수의 독립 소비자 지원 (Multiple Independent Consumers)
⚙️ Kafka의 기본 개념
Kafka는 간단히 말해 Publish / Subscribe 기반의 메시지 브로커이다.
하지만 단순 메시지 큐를 넘어 분산 스트리밍 플랫폼으로 동작한다.
🔹 핵심 용어 정리
| 용어 | 설명 |
|---|---|
| Producer | Kafka에 메시지를 보내는 주체 (예: 웹 서버, IoT 장비 등) |
| Consumer | Kafka에서 메시지를 읽는 주체 (예: 알림 서버, 분석 시스템) |
| Topic | 메시지를 구분하는 주제. Kafka는 메시지를 Topic 단위로 관리 |
| Partition | Topic을 수평으로 나눈 단위. 메시지 순서가 보장되는 최소 단위 |
| Offset | Partition 내에서 메시지의 위치. Consumer가 이 값을 기억해서 다음 메시지를 읽음 |
| Broker | Kafka 서버 하나를 의미. Kafka는 여러 Broker로 클러스터를 구성함 |
| Consumer Group | 같은 Topic을 읽는 Consumer들의 집합. 메시지를 분산 처리 가능 |
🧠 Kafka 아키텍처 이해하기
Kafka는 메시지를 토픽 → 파티션 → 브로커 구조로 저장하고 처리한다.
[ Producer1 ] [ Producer2 ]
│ │
▼ ▼
┌──────── Kafka Cluster ────────┐
│ │
│ [ Broker1 ] [ Broker2 ] │
│ │ │ │
│ ▼ ▼ │
│ Topic: 'user_log' │
│ ├── Partition 0 ────────┐ │
│ ├── Partition 1 ────────┐ │
│ └── Partition 2 ────────┐ │
└───────────────────────────┘
│ │ │
▼ ▼ ▼
[ Consumer Group A ]
├─ Consumer A1
└─ Consumer A2
[ Consumer Group B ]
├─ Consumer B1
└─ Consumer B2
이 구조 덕분에 Kafka는 다음과 같은 장점을 가진다:
- Partition을 기준으로 병렬 처리 가능 → 확장성 뛰어남
- 메시지를 디스크에 저장하며 Offset으로 추적 → 재처리 가능
- 여러 Consumer Group이 같은 Topic을 독립적으로 소비 → 유연성
🔄 Kafka와 Redis의 관계
Kafka와 Redis는 서로 다른 목적의 기술이지만 실시간 데이터 처리 파이프라인에서 함께 자주 사용된다.
📌 Redis란?
- 인메모리 데이터 저장소
- 데이터 구조가 다양하고 초고속 응답 처리가 강점
- 기본적인 Pub/Sub 기능도 제공함
🤝 Kafka와 Redis의 조합 시나리오
| 시나리오 | 설명 |
|---|---|
| Kafka → Redis | Kafka로 들어온 메시지를 Redis에 캐싱하여 빠르게 조회 (예: 실시간 대시보드) |
| Redis → Kafka | Redis에 임시로 쌓인 데이터를 Kafka로 넘겨 로그 저장/분석 (예: 유저 이벤트 로그) |
| Kafka + Redis | Kafka는 메시지 브로커, Redis는 캐싱/세션 관리용으로 병행 사용 |
예시 상황
- 실시간 알림 시스템: Kafka는 이벤트를 브로드캐스팅하고 Redis는 유저별 알림 큐를 관리
- AI 추론 결과 캐싱: Kafka로 요청이 들어오고 Redis에 결과를 미리 저장하여 재요청 시 빠르게 응답
🆚 Kafka vs Redis 비교 요약
| 기준 | Kafka | Redis |
|---|---|---|
| 메시지 처리량 | 초대형 | 소형~중형 |
| 데이터 보존 | 디스크 기반, 장기 보존 가능 | 메모리 기반, 휘발성 가능 |
| 메시지 순서 | Partition 단위 순서 보장 | 보장되지 않음 |
| 소비자 | 다수 지원 (Consumer Group) | 제한적 |
| 주요 용도 | 로그, 이벤트 스트림, 분석 파이프라인 | 캐싱, Pub/Sub, 세션 |
✅ 마무리: Kafka를 언제, 어떻게 써야 할까?
Kafka는 대규모 데이터 파이프라인을 구성할 때 중심 허브 역할로 사용하면 좋다.
반면 Redis는 빠른 응답을 위한 보조 저장소 또는 Pub/Sub 보완재로 이상적이다.
Kafka는 “데이터가 흘러가는 중심”, Redis는 “그 중 일부를 빠르게 캐싱하거나 전달”하는 역할로 보면 된다.