1. Kafka 개념
Kafka는 분산형 스트리밍 플랫폼으로, 주로 대용량 실시간 데이터 처리, 로그 수집, 이벤트 소싱 등에 사용됩니다. 핵심 특징은 다음과 같습니다:
- Publish-Subscribe 모델: Producer가 메시지를 보내고 Consumer가 구독함.
- 분산형: 여러 브로커(서버)에 데이터를 분산 저장.
- 내결함성(fault-tolerance): 데이터를 복제(Replication)하여 브로커 장애에도 데이터 손실 최소화.
- 높은 처리량(high throughput): 배치 전송, 디스크 기반 구조로 초당 수백만 메시지 처리 가능.
- 저지연(low latency): 일반적으로 ms 단위 메시지 전달.
2. Kafka 구조
2.1 Broker
- Kafka 서버 단위.
- 클러스터는 여러 브로커로 구성되며, 각각 독립적으로 메시지를 저장하고 전달.
- 브로커는 Leader-Follower 구조로 토픽 파티션 관리.
2.2 Topic & Partition
- Topic: 메시지의 카테고리 또는 스트림. 예: user-events
- Partition: Topic의 물리적 분할 단위. 데이터는 파티션 단위로 저장.
- Partition은 순서를 보장하며, Leader 브로커가 해당 파티션 요청을 처리.
2.3 Producer
- 데이터를 Kafka로 보내는 클라이언트.
- Key 기반 파티셔닝 가능 (같은 Key는 같은 파티션으로).
2.4 Consumer
- Kafka에서 데이터를 읽는 클라이언트.
- Consumer Group으로 묶이면 파티션별 메시지를 병렬 처리 가능.
- Offset 관리: Consumer가 어디까지 메시지를 읽었는지 기록.
2.5 Zookeeper / KRaft
- 과거에는 Zookeeper가 브로커 메타데이터, Leader 선출, 토픽 관리에 사용됨.
- 최신 Kafka(3.x 이상)에서는 KRaft 모드(Zookeeper 없이 Kafka 자체적으로 메타데이터 관리) 지원.
3. 메시지 흐름
- Producer가 메시지를 특정 Topic에 발행.
- Topic은 하나 이상의 Partition으로 나뉨.
- Partition의 Leader 브로커가 메시지 기록 및 복제(Follower) 수행.
- Consumer는 Offset 기반으로 Partition을 읽음.
- Consumer Group을 사용하면 각 Partition은 한 그룹 내 Consumer에게만 전달되어 병렬 처리 가능.
4. 데이터 저장과 내구성
- 메시지는 디스크에 순차적으로 Append.
- Replication: 각 Partition은 Leader + N개의 Follower로 복제.
- ACK 모드:
- acks=0: Producer가 확인 없이 전송.
- acks=1: Leader 브로커가 기록 완료 시 ACK.
- acks=all/-1: Leader+Follower가 모두 기록 완료 시 ACK.
- Retention: 메시지를 일정 기간 또는 크기 기준으로 유지 후 삭제.
5. 성능 최적화 포인트
- Batching: Producer 배치 전송 → 네트워크 효율 증가.
- Compression: 메시지 압축 (gzip, snappy, lz4) → I/O 감소.
- Partition 수 조정: Consumer 병렬 처리 가능성 결정.
- Consumer Poll 주기: poll 주기와 처리 속도 균형.
- Replication Factor: 데이터 안정성과 브로커 부하 균형.
6. Kafka vs RabbitMQ (간단 비교)
| 항목 | Kafka | RabbitMQ |
| 메시지 모델 | Publish-Subscribe | Queue |
| 메시지 저장 | 디스크 기반, 순차적 저장 | 메모리/디스크 혼합 |
| 처리량 | 매우 높음 | 낮음~중간 |
| 내구성 | 복제 + 로그 기반 | ACK 기반, Queue에 저장 |
| 순서 보장 | Partition 단위 | Queue 단위 |
| 사용 케이스 | 로그, 이벤트 스트리밍, 빅데이터 | Task Queue, RPC |
7. 활용 사례
7-1. 실시간 데이터 파이프라인 (Real-time Data Pipeline)
목적: 다양한 시스템에서 발생하는 데이터를 실시간으로 수집, 처리, 전송
상세 사례:
- 웹/모바일 로그 수집
- 클릭, 페이지뷰, 사용자 행동 로그를 Kafka 토픽으로 수집
- 실시간 분석 플랫폼(예: Flink, Spark Streaming)으로 전달
- 장점: 로그 손실 없이 안정적 처리, 높은 처리량
- 센서/IoT 데이터 스트리밍
- 스마트 공장, 차량, IoT 디바이스에서 발생하는 센서 데이터 수집
- Kafka Connect를 활용해 데이터베이스, 시계열 DB, 모니터링 시스템으로 전달
사용 기술: Kafka Connect, Kafka Streams, Spark/Flink
7-2. 실시간 이벤트 처리 (Real-time Event Processing)
목적: 이벤트 기반 서비스에서 발생하는 이벤트를 실시간으로 처리
상세 사례:
- 금융 트랜잭션 모니터링
- 은행 거래 발생 시 이벤트를 Kafka로 전달
- 사기 탐지 시스템에서 실시간으로 분석 후 알람 발생
- 온라인 게임 서버 이벤트 처리
- 게임 내 유저 활동, 점수, 아이템 획득 이벤트를 실시간 처리
- 리더보드, 인게임 알림, 추천 시스템 즉시 반영
사용 기술: Kafka Streams, KSQL, Flink
7-3. 메시지 브로커 대체 (Messaging Backbone)
목적: 기존 메시지 큐(RabbitMQ, ActiveMQ 등)를 대체하여 높은 처리량과 내구성 제공
상세 사례:
- 마이크로서비스 통신
- 서비스 간 이벤트 전달, 상태 변경 알림
- 장점: 서비스 간 느슨한 결합, 내구성 확보, 재시도 자동화
- 비동기 작업 처리
- 주문 처리, 이메일 발송, 알림 전송 등을 Kafka 토픽으로 처리
- 소비자(Consumer)가 여러 개 있어도 동일한 메시지 분산 처리 가능
사용 기술: Kafka Consumer Group, Partitioning
7-4. 로그 수집 및 모니터링 시스템
목적: 대규모 로그를 중앙화하여 실시간 모니터링, 분석 가능
상세 사례:
- ELK 스택과 연동
- Kafka → Logstash → Elasticsearch → Kibana
- 대규모 로그를 실시간 수집, 색인, 시각화
- 시스템 상태 모니터링
- 서버 상태, 애플리케이션 메트릭, 장애 알림을 Kafka로 수집
- Prometheus/Grafana와 연동하여 실시간 대시보드 구성
사용 기술: Kafka Connect, Beats, ELK, Grafana
7-5. 데이터 통합 및 ETL
목적: 서로 다른 시스템의 데이터를 통합하여 데이터 웨어하우스로 전달
상세 사례:
- OLTP → OLAP 실시간 ETL
- MySQL, PostgreSQL 등 DB에서 변경 데이터(CDC)를 Kafka로 스트리밍
- Kafka Connect → 데이터 웨어하우스(AWS Redshift, Snowflake 등)
- 장점: 실시간 분석, 배치 ETL 필요 없음
- 다양한 DB/시스템 동기화
- 금융, 물류 시스템 간 실시간 데이터 동기화
- 예: 주문/재고 정보, 배송 상태 실시간 반영
사용 기술: Kafka Connect, Debezium(CDC), Kafka Streams
7-6. 추천 및 개인화 서비스
목적: 실시간 사용자 행동 기반 추천, 개인화 콘텐츠 제공
상세 사례:
- 온라인 쇼핑몰 추천 시스템
- 사용자가 본 상품, 장바구니, 검색 기록을 Kafka 토픽으로 수집
- 실시간 추천 엔진에서 분석 후 추천 상품 제공
- 뉴스/콘텐츠 플랫폼
- 유저 클릭/조회 데이터를 Kafka로 수집
- Kafka Streams로 인기 콘텐츠, 개인화 뉴스 추천
사용 기술: Kafka Streams, Flink, ML 모델 연동
8. 사례별 구체적 기업 활용
| 기업 | 활용 사례 |
| Kafka 자체 개발, 실시간 뉴스피드, 이벤트 수집 및 분석 | |
| Netflix | 실시간 스트리밍 데이터 파이프라인, 서비스 메트릭 처리 |
| Uber | 실시간 위치, 승차/요금 데이터 수집 및 분석 |
| Airbnb | 실시간 사용자 이벤트 처리 및 추천 시스템 |
| 광고 이벤트 처리 및 로그 수집 |
9. License
9-1. Apache License 2.0 주요 내용
- 무료 사용: 상업적, 비상업적 구분 없이 누구나 사용 가능.
- 소스 코드 수정 가능: Kafka 소스 코드를 수정하거나 확장하여 자체 프로젝트에 포함 가능.
- 배포 가능: 수정한 코드나 원본을 재배포 가능. 단, 아래 조건 준수 필요.
- 저작권 표시 유지: 재배포 시 원본 저작권 표시 및 라이선스 사본 포함.
- 특허권 부여: 기여자에게서 특허 사용 권한을 포함.
- 상표권 제한: Apache 로고나 이름은 별도의 허가 없이 사용 불가.
9-2. 실무에서 주의할 점
- Kafka를 사용한 애플리케이션을 상용 배포할 때, 라이선스 자체는 자유지만 **“Apache” 상표 사용”**은 제한됨.
- Kafka를 수정한 경우, 수정한 코드에 대한 저작권 및 라이선스 표시 필요.
- GPL과 달리 카피레프트 의무 없음: 수정 후 코드를 공개할 필요 없음.
'소프트웨어 > 상식' 카테고리의 다른 글
| MQTT : 경량 게시-구독(Publish-Subscribe) 메시징 프로토콜 (0) | 2025.09.20 |
|---|---|
| RabbitMQ : 오픈소스 메시지 브로커 (0) | 2025.09.20 |
| JWT(JSON Web Token) (0) | 2025.09.20 |
| 보안 및 인증 분야 "토큰(Token)" (0) | 2025.09.20 |
| SAML(Security Assertion Markup Language) (0) | 2025.09.20 |