람다 아키텍처(Lambda Architecture)는 배치 레이어와 스피드 레이어를 병렬로 운영해 대용량 데이터의 정확성과 실시간성을 동시에 달성하는 빅데이터 아키텍처다. 네이선 마르츠(Nathan Marz)가 제안했다.
3계층 구조
원시 데이터
│
┌─────────────┴─────────────┐
▼ ▼
배치 레이어 스피드 레이어
(Batch Layer) (Speed Layer)
Hadoop/Spark Kafka Streams
정확하지만 느림 빠르지만 근사
│ │
▼ ▼
배치 뷰 (Batch View) 실시간 뷰 (Realtime View)
│ │
└─────────────┬─────────────┘
▼
서빙 레이어
(Serving Layer)
Druid/Cassandra
각 레이어 역할
배치 레이어:
- 전체 히스토리 데이터 재처리
- 정확한 결과 (오류 수정 가능)
- 주기적 실행 (시간, 일 단위)
- Hadoop MapReduce, Apache Spark
스피드 레이어:
- 최신 데이터만 처리 (배치 미처리 구간)
- 낮은 지연 (실시간)
- 근사 결과 허용
- Kafka Streams, Apache Flink
서빙 레이어:
- 배치 뷰 + 실시간 뷰 병합
- 쿼리 인터페이스 제공
구현 예시 (클릭수 집계)
python
# 배치 레이어 (Spark)
clicks_rdd = sc.textFile("hdfs://data/clicks/*")
hourly_counts = clicks_rdd .map(lambda line: (parse_hour(line), 1)) .reduceByKey(lambda a, b: a + b)
hourly_counts.saveAsTextFile("hdfs://batch-views/hourly")
# 스피드 레이어 (Kafka Streams)
# 최근 1시간 클릭수를 실시간으로 카운팅
# 서빙 레이어 쿼리
def get_hourly_clicks(hour):
batch_count = cassandra.get(f"batch:{hour}")
recent_count = redis.get(f"speed:{hour}") # 배치 이후 클릭
return batch_count + recent_count
| 비교 | 람다 | 카파 |
|---|
| 복잡도 | 높음 (2 코드베이스) | 낮음 |
| 정확성 | 높음 | 중간 |
| 재처리 | 별도 배치 | 스트림 재생 |
| 적합 | 정확도 최우선 | 실시간 우선 |
관련 개념