Event Streaming이란?
Event Streaming은 실시간 데이터 흐름을 기반으로 시스템 간 데이터를 주고받고 처리하는 아키텍처 패턴입니다.
인간 신경계처럼 시스템 내에서 이벤트(사건)가 발생할 때마다 실시간으로 이를 감지, 저장, 처리, 전달하는 메커니즘.
핵심 특징
- 이벤트 실시간 수집 및 처리
- 데이터의 영구 저장 및 조회 가능
- 다양한 시스템 간 데이터 연동
- 레거시 데이터베이스 기반 시스템을 실시간 시스템으로 진화 가능
활용 예시
- 금융: 주식 거래, 실시간 결제 처리
- 물류: 배송 상태 모니터링
- IoT: 센서 데이터 수집 및 분석
- 헬스케어: 환자 상태 모니터링
- 리테일: 실시간 주문 처리 및 추천 시스템
Apache Kafka란?
Apache Kafka는 Event Streaming을 위한 분산형 데이터 플랫폼입니다. Netflix, LinkedIn, Uber 등 대형 서비스에서 핵심 인프라로 사용되고 있습니다.
Kafka의 세 가지 주요 기능
- Publish & Subscribe: 이벤트를 송수신하는 메시징 시스템
- Durable Storage: 이벤트를 신뢰성 있게 장기간 저장
- Stream Processing: 스트림 데이터를 실시간 또는 과거 데이터 기반으로 처리
Kafka는 분산성, 고가용성, 고성능을 목표로 설계되었습니다.
아키텍처 구성
- 서버 측 구성
- Brokers: 이벤트 저장 및 관리
- Kafka Connect: 외부 시스템과 데이터 연동
- 클라이언트 측 구성
- Producers: 이벤트 생산자 (쓰기)
- Consumers: 이벤트 소비자 (읽기)
- 다양한 언어 지원 (Java, Scala, Python, Go 등)
핵심 개념 및 용어 정리
| 개념 | 설명 |
|---|
| Event | "무엇인가 발생했다"를 나타내는 기록 (Key, Value, Timestamp 포함) |
| Topic | 이벤트를 저장하는 논리적 단위 (폴더 개념) |
| Partition | Topic을 나눈 물리적 단위 (버킷) |
| Replication | 장애 대응을 위한 데이터 복제 (보통 3개 복제본) |
| Producer | 이벤트를 Kafka에 발행하는 역할 |
| Consumer | Kafka로부터 이벤트를 구독하여 처리하는 역할 |
특징: 이벤트는 소비한 뒤 삭제되지 않으며, 다수의 Consumer가 동일 Topic을 읽을 수 있습니다.
이벤트 저장과 처리 흐름
- Producer가 이벤트를 특정 Topic에 발행
- 이벤트는 하나의 Partition에 기록
- Consumer는 Topic의 Partition으로부터 이벤트를 읽음
- 필요한 경우, Kafka Streams 등으로 실시간 데이터 변환 및 집계 처리
Kafka API 살펴보기
Kafka는 Java/Scala 기반으로 다음과 같은 주요 API를 제공합니다.
- Admin API: 토픽, 브로커 관리
- Producer API: 이벤트 발행
- Consumer API: 이벤트 구독 및 처리
- Kafka Streams API: 이벤트 스트림 변환 및 집계
- Kafka Connect API: 외부 시스템 연동용 커넥터 관리 (PostgreSQL, MongoDB 등 지원)
Kafka를 사용하며 느낀 실무 포인트
- Topic 설계가 중요하다: 잘못 설계하면 Partition 수 조정이 어려워 스케일링에 문제가 생김
- 이벤트 스키마 관리를 위한 Schema Registry 사용을 추천
- Exactly-once 처리가 필요한 경우 프로듀서-컨슈머 설정을 신중히 해야 함
- 모니터링/알림 필수: 브로커 장애, Lag 발생 모니터링 필요 (Prometheus + Grafana 추천)