<aside>
1️⃣ Kafka는 왜 만들어졌는가?
</aside>
-
배경과 문제점
- LinkedIn은 빠르게 성장하는 플랫폼으로, 수백만 명의 사용자와 수십억 개의 이벤트를 실시간으로 처리해야 했다. 그러나 당시 사용하고 있던 메시징 시스템은 이런 대규모 데이터와 실시간 분석 요구사항을 충족시키지 못했다.
-
결론: Kafka의 탄생
- 이러한 문제를 해결하기 위해, LinkedIn은 새로운 데이터 스트리밍 플랫폼이 필요했다. 그 결과, 높은 처리량, 낮은 지연 시간, 그리고 높은 가용성을 목표로 Kafka가 개발되었다. Kafka의 도입으로 LinkedIn은 기존에 겪던 데이터 처리와 실시간 분석의 문제를 성공적으로 해결할 수 있었다.
- 이렇게 Kafka는 LinkedIn의 특정 문제를 해결하기 위해 탄생했고, 그 후로도 그 특성과 능력으로 많은 기업과 개발자에게 널리 사용되고 있다.
- 근데 왜 LinkedIn에서 만들었는데 이름이 Apache Kafka인가?
-
Kafka의 주요 특징
- 분산 아키텍처
- Kafka는 여러 노드에 데이터를 분산 저장하여, 하나의 노드가 실패해도 전체 시스템에 큰 영향을 미치지 않는다.
- 예시: 금융 시스템에서 하나의 서버가 다운되더라도, Kafka의 분산 아키텍처 덕분에 다른 서버에서 트랜잭션을 계속 처리할 수 있다.
- 높은 처리량
- Kafka는 초당 수백만 개의 이벤트를 처리할 수 있어, 대규모 데이터 스트림을 신속하게 처리할 수 있다.
- 예시: 실시간 광고 플랫폼에서는 Kafka를 사용하여 수백만 명의 사용자가 클릭하는 광고 이벤트를 실시간으로 분석할 수 있다.
- 실시간 처리
- Kafka는 데이터를 실시간으로 처리할 수 있어, 즉각적인 의사 결정과 분석이 가능하다.
- 예시: 자동차 공유 서비스에서는 Kafka를 사용하여 실시간으로 차량의 위치와 상태를 모니터링하고, 이를 바탕으로 가장 효율적인 경로를 계산할 수 있다.
<aside>
2️⃣ 왜 Kafka를 사용하는가?
</aside>
-
Event-Driven Architecture (EDA)
- 비동기성:
- 서비스 간에 독립적으로 동작할 수 있어, 한 서비스가 다운되더라도 전체 시스템에 미치는 영향을 최소화한다.
- 예시: 은행에서 계좌 이체 서비스가 문제를 일으켜도, Kafka를 통해 다른 서비스(예: 계좌 조회, 대출 신청)는 정상적으로 작동할 수 있다.
- 탄력성:
- 이벤트 소싱을 통해 시스템의 상태를 쉽게 재구성할 수 있어, 장애 발생 후 빠르게 복구가 가능하다.
- 예시: 온라인 게임에서 플레이어의 게임 진행 상태를 이벤트로 저장하면, 서버 장애 후에도 게임 진행 상태를 복구할 수 있다.
-
Microservices Architecture (MSA)와 Kafka의 관계
- 데이터 분리:
- 마이크로서비스 아키텍처에서 각 서비스는 독립적인 데이터를 가진다. Kafka는 이러한 서비스 간에 데이터를 안정적으로 전달하는 메시지 큐의 역할을 한다.
- 예시: 쇼핑몰에서 주문 관리 서비스가 주문을 받으면, 이 정보를 Kafka를 통해 재고 관리 서비스에 전달할 수 있다. 이로써 각 서비스는 자신의 데이터를 독립적으로 관리하면서도 필요한 정보를 신속하게 공유할 수 있다.
- 이벤트 전파:
- Kafka는 이벤트 기반 아키텍처를 지원한다. 이는 마이크로서비스 간에 데이터를 동기화하거나 상태를 공유할 때 유용하다.
- 예시: 상품이 판매되면, 주문 관리 서비스는 이 정보를 Kafka에 게시한다. 재고 관리 서비스는 Kafka에서 이 이벤트를 구독하여 실시간으로 재고를 업데이트할 수 있다.
- Kafka를 사용하면 마이크로서비스 간에 데이터를 효율적으로 전달하고 동기화할 수 있다. 이로 인해 시스템 전체의 복잡성을 줄이고, 각 서비스가 독립적으로 확장될 수 있는 구조를 만들 수 있다. 이것이 Kafka가 마이크로서비스 아키텍처에서 널리 사용되는 주된 이유다.
-
대용량 데이터 처리
- 스트림 처리:
- 실시간으로 대량의 데이터를 처리하고 분석할 수 있다.
- 예시: 실시간으로 SNS 플랫폼에서 발생하는 트윗을 분석하여 현재 가장 핫한 키워드를 찾을 수 있다.
- 분산 처리:
- 여러 브로커와 파티션을 통해 높은 병렬성과 처리량을 달성한다.
- 예시: 뉴스 웹사이트에서 동시에 수많은 사용자의 클릭 스트림 데이터를 처리할 수 있다.
-
기타
- 장애 복구: 데이터를 여러 브로커에 복제하여 데이터 손실을 방지한다.
- 스케일 아웃: 시스템이 성장하면 새로운 노드를 쉽게 추가하여 확장성을 유지한다.
- 다양한 클라이언트 지원: 여러 프로그래밍 언어를 지원하여 다양한 애플리케이션과 통합이 가능하다.
<aside>
3️⃣ 어떤 경우에 Kafka를 사용하는가?
</aside>
- 실시간 분석
- 사용자 행동 분석:
- 웹사이트나 앱에서 사용자가 어떤 상품을 클릭하거나 얼마나 오래 머무르는지 등을 실시간으로 분석한다. 이 정보를 바탕으로 사용자에게 개인화된 추천을 제공할 수 있다.
- 예시: 넷플릭스에서는 사용자의 시청 기록을 실시간으로 분석하여 다음에 볼 만한 영화나 드라마를 추천합니다.
- 이벤트 소싱
- 재고 관리:
- 상점의 상품 재고가 얼마나 남았는지, 어떤 상품이 가장 빨리 팔리고 있는지를 실시간으로 추적한다.
- 예시: 아마존은 실시간 재고 관리를 통해 상품이 부족할 경우 자동으로 재고를 채운다.
- 데이터 레이크
- 데이터 수집:
- 여러 출처(웹사이트, 모바일 앱, IoT 디바이스 등)에서 발생하는 데이터를 하나의 중앙 저장소에 모은다.
- 예시: 의료 기관에서는 다양한 장비와 시스템에서 발생하는 환자 데이터를 하나의 데이터 레이크에 저장하여 분석한다.
- 스트림 처리
- 로그 분석:
- 서버의 작동 상태, 에러 발생 등을 실시간으로 모니터링하여 문제가 발생하면 즉시 대응한다.
- 예시: 금융 기관에서는 실시간 로그 분석을 통해 부정 행위나 시스템 오류를 즉시 탐지한다.
- 마이크로서비스 아키텍처
- 서비스 간 통신:
- 여러 작은 서비스(마이크로서비스)가 서로 메시지를 주고받을 때 Kafka를 사용하여 비동기적으로 데이터를 전달한다.
- 예시: 음식 배달 앱에서 주문 처리 서비스, 결제 서비스, 배달 서비스가 서로 독립적으로 동작하면서 필요한 정보를 Kafka를 통해 주고받는다.