어제 배운 배치 수집은 "모았다가 한꺼번에"였다. 오늘부터는 정반대 세계, 스트리밍이다. 클릭스트림, IoT 센서, 결제 트랜잭션, 게임 텔레메트리처럼 데이터가 끊임없이 흘러들어오고, 그것을 초 단위로 처리해야 하는 상황. 그 한가운데 있는 서비스가 Amazon Kinesis Data Streams(KDS) 다.
KDS는 한마디로 "확장 가능한 실시간 데이터 파이프"다. 수많은 프로듀서가 데이터를 밀어넣고, 수많은 컨슈머가 거의 동시에 읽어간다. 오늘은 이 파이프의 내부 구조(샤드), 데이터를 어느 칸에 넣을지 정하는 파티션 키, 그리고 처리량 계산을 본다.
KDS 스트림은 하나의 거대한 통이 아니라 샤드(shard) 라는 여러 레인으로 나뉜다. 샤드는 처리량의 기본 단위이자 병렬성의 단위다. 각 샤드는 고정된 용량을 가진다.
샤드 1개의 용량:
- 쓰기(입력): 1 MB/s 또는 1,000 records/s
- 읽기(출력): 2 MB/s (공유 처리량 기준)
즉 스트림의 총 처리량 = 샤드 수 × 샤드당 용량이다. 초당 5MB를 써야 한다면 최소 5개의 샤드가 필요하다. 샤드를 늘리면(resharding) 처리량이 비례해서 늘어난다.
import boto3
kinesis = boto3.client("kinesis")
kinesis.create_stream(StreamName="clickstream", ShardCount=5)