Kafka 개요
Apache Kafka 개요 및 상세 정리
Apache Kafka는 분산형 스트리밍 플랫폼(Distributed Streaming Platform)으로, 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 설계되었습니다. 원래 링크드인(LinkedIn)에서 내부 로그 처리를 위해 개발되었으나, 현재는 전 세계 수많은 기업에서 실시간 데이터 처리를 위한 표준으로 자리 잡았습니다.
1. 주요 개념 및 아키텍처
Kafka는 기본적으로 게시-구독(Publish-Subscribe) 모델을 따르며, 다음과 같은 핵심 요소로 구성됩니다.
- Producer (생산자): 데이터를 생성하여 Kafka 토픽으로 보내는 애플리케이션.
- Consumer (소비자): 토픽에서 데이터를 읽어와 처리하는 애플리케이션.
- Broker (브로커): Kafka 서버를 의미하며, 데이터를 저장하고 관리합니다. 여러 대의 브로커가 모여 클러스터를 이룹니다.
- Topic (토픽): 데이터가 저장되는 카테고리 또는 이름입니다.
- Partition (파티션): 토픽을 물리적으로 나눈 단위로, 병렬 처리를 가능하게 하고 데이터의 순서를 보장(단일 파티션 내에서)합니다.
- Zookeeper/KRaft: 클러스터의 메타데이터 관리 및 브로커의 상태를 관리하는 코디네이터입니다. (최신 버전은 KRaft를 통해 Zookeeper 의존성을 제거 중)
2. 사용 목적
Kafka는 단순히 데이터를 전달하는 것을 넘어 다음과 같은 목적으로 사용됩니다.
- 데이터 통합: 파편화된 다양한 시스템(DB, 로그, 앱 등)의 데이터를 중앙에서 실시간으로 연결합니다.
- 디커플링(Decoupling): 데이터를 보내는 쪽과 받는 쪽의 의존성을 완전히 분리하여, 한쪽 시스템의 장애가 전체로 퍼지는 것을 방지합니다.
- 실시간 스트림 처리: 데이터가 발생하는 즉시 가공, 분석하여 비즈니스 가치를 창출합니다.
- 대용량 로그 수집: 수많은 서버에서 발생하는 엄청난 양의 로그 데이터를 안정적으로 수집합니다.
3. 활용도 및 유즈케이스
Kafka는 현재 IT 산업 전반에서 매우 폭넓게 활용되고 있습니다.
- 메시징 서비스: 마이크로서비스 아키텍처(MSA) 간의 통신.
- 사용자 활동 추적: 웹/앱에서의 클릭 스트림, 페이지 뷰 등을 실시간 수집.
- 지표 모니터링: 시스템 호스트의 상태나 애플리케이션 성능 지표 수집 및 알람.
- 로그 집계: 여러 서비스의 로그를 한곳으로 모아 Elasticsearch나 HDFS로 전달.
- 이벤트 소싱(Event Sourcing): 상태 변화를 이벤트의 시퀀스로 저장하여 데이터 변경 이력을 완벽히 추적.
4. 장점과 단점
장점
- 고성능 & 고가용성: 초당 수백만 건의 데이터를 처리할 수 있으며, 분산 복제(Replication)를 통해 데이터 손실을 방지합니다.
- 확장성 (Scalability): 서비스 중단 없이 브로커를 추가하여 성능과 용량을 선형적으로 확장할 수 있습니다.
- 영속성 (Durability): 메시지를 메모리가 아닌 디스크에 저장합니다. 설정에 따라 데이터를 일정 기간 보관할 수 있어 재처리가 가능합니다.
- 소비자 독립성: 여러 소비자 그룹이 서로 다른 속도로 동일한 데이터를 읽어갈 수 있습니다.
단점
- 운영 복잡도: 클러스터 설정, 파티션 최적화, 복제 관리 등 운영 난이도가 높은 편입니다.
- 메시지 순서 보장의 제약: 토픽 전체의 순서가 아닌, 동일 파티션 내에서만 순서가 보장됩니다.
- 설정의 민감성: 처리량과 지연 시간(Latency) 사이의 트레이드오프가 있어, 환경에 맞는 세밀한 튜닝이 필수적입니다.
- 작은 메시지에 최적화: 너무 큰 용량의 메시지(예: 수백 MB 파일)를 직접 전송하는 데는 적합하지 않습니다.
5. 요약
Apache Kafka는 “강력한 내구성을 가진 실시간 데이터 배관”이라고 이해할 수 있습니다. 대규모 시스템에서 발생하는 방대한 데이터를 막힘없이 흐르게 하고, 시스템 간의 결합도를 낮추어 확장성 있는 아키텍처를 구축하는 데 핵심적인 역할을 수행합니다.