AWS
샤드, 반복자, 체크포인트: Kinesis 스트림 안정성의 핵심
heesoohi
2025. 6. 8. 02:43
Kinesis의 데이터 단위: 샤드(Shard)
Kinesis 스트림은 데이터를 샤드 단위로 분산 저장한다. 샤드는 시간 순서대로 데이터를 저장하며, 각 샤드는 독립적으로 읽기/쓰기가 가능하다. 스트림 내에는 여러 개의 샤드를 구성할 수 있으며, 이를 통해 병렬성과 확장성을 확보할 수 있다.
샤드에서 데이터를 읽는 법: 샤드 반복자(Shard Iterator)
샤드에서 데이터를 읽기 위해서는 샤드 반복자(shard iterator)를 요청해야 한다. 반복자는 커서(cursor)와 같은 역할을 하며, 이 반복자를 통해 특정 위치부터 데이터를 읽을 수 있다.
반복자의 특징
- GetShardIterator API를 통해 요청한다.
- 반복자는 5분간 유효하며, 만료 후에는 새로 요청해야 한다.
- 반복자의 유형:
TRIM_HORIZON, LATEST, AT_SEQUENCE_NUMBER, AFTER_SEQUENCE_NUMBER, AT_TIMESTAMP
Kinesis Client Library(KCL)의 동작 구조
애플리케이션은 보통 Kinesis를 직접 제어하지 않고, Kinesis Client Library(KCL)를 통해 데이터를 읽는다. KCL은 아래 순서대로 동작한다
- 각 샤드의 데이터를 병렬로 처리한다.
- 읽은 위치(체크포인트)를 기록하여 이어서 읽을 수 있도록 한다.
- 체크포인트는 DynamoDB 테이블(샤드 테이블)에 저장한다.
체크포인트와 샤드 반복자의 관계
KCL은 데이터를 계속 읽기 위해 주기적으로 새로운 반복자를 요청하는데 이때 기준이 되는 정보가 체크포인트이다. 일반적으로 KCL은 AFTER_SEQUENCE_NUMBER 옵션을 사용하여, 마지막으로 읽은 위치 바로 다음부터 데이터를 읽는다. 이 기능을 위해서는 DynamoDB 테이블에 체크포인트가 정확히 저장되어 있어야 한다.
샤드 반복자가 예기치 않게 종료되지 않고, 스트림 데이터를 정상적으로 읽기 위해서는 DynamoDB 테이블의 쓰기 처리량이 충분해야 한다. 샤드 반복자 갱신을 정상적으로 유지하기 위한 방법은 아래와 같다.
🔼 DynamoDB 쓰기 용량 증가 | 가장 직접적이고 효과적인 해결 방법 |
💾 DynamoDB 스토리지 업그레이드 | 저장 공간이 부족한 경우에 필요하며, 쓰기 병목과는 별개의 문제 |
🧠 KCL 재시도 정책 조정 | 반복자 요청 실패 시 과도한 재시도를 방지해야 함 |
🧪 CloudWatch 지표 모니터링 | DynamoDB의 쓰기 병목을 실시간으로 확인하고 조치할 수 있음 |