Shard
1 Kinesis Data Streams의 Shard
- Kinesis Data Streams는 대규모 데이터 스트리밍을 처리하기 위한 서비스입니다.
- 스트림 데이터는 여러 개의 샤드(shard)로 분할되어 병렬 처리됩니다.
- 샤드는 Kinesis Data Streams의 핵심 구성 요소 중 하나입니다.
2 Shard의 개념
- Shard는 Kinesis Data Streams에서 데이터 레코드를 저장하고 처리하는 기본 단위입니다.
- 각 샤드는 고정된 용량을 가지고 있으며, 읽기 및 쓰기 용량이 제한됩니다.
- 데이터를 스트림에 넣으면 특정 샤드에 할당되며, 소비자는 해당 샤드에서 데이터를 읽어 처리합니다.
2.1 Shard의 특성
- 각 샤드는 초당 1MB의 쓰기 용량과 2MB의 읽기 용량을 가집니다.
- 또한, 각 샤드는 초당 최대 1,000개의 PUT 레코드를 처리할 수 있습니다.
- Shard의 읽기 용량은 초당 5개의 GET 요청과 2개의 레코드 반환으로 제한됩니다.
2.2 Shard의 구성
- Kinesis 스트림은 하나 이상의 샤드로 구성될 수 있으며, 스트림의 용량은 샤드의 개수에 따라 결정됩니다.
- 필요에 따라 샤드를 추가하거나 제거하여 스트림의 용량을 조절할 수 있습니다.
- 샤드를 추가하면 스트림의 쓰기 및 읽기 용량이 증가하고, 샤드를 제거하면 용량이 감소합니다.
3 Shard의 데이터 분할
- 데이터를 샤드에 분배하기 위해 Kinesis는 파티션 키(partition key)를 사용합니다.
- 파티션 키는 데이터를 샤드에 균등하게 분배하는 데 사용되는 문자열 값입니다.
- Kinesis는 파티션 키의 해시 값을 계산하여 데이터를 특정 샤드에 할당합니다.
3.1 파티션 키의 중요성
- 파티션 키를 통해 데이터를 효과적으로 분산시켜 각 샤드의 부하를 균등하게 할 수 있습니다.
- 파티션 키를 잘못 설정하면 특정 샤드에 부하가 집중될 수 있으므로, 키를 적절히 선택하는 것이 중요합니다.
3.2 파티션 키 사용 예시
import boto3
kinesis_client = boto3.client('kinesis')
response = kinesis_client.put_record(
StreamName='my-stream',
Data=b'{"key":"value"}',
PartitionKey='partition-key-1'
)
- 위 예시에서
partition-key-1은 파티션 키로 사용되며, 이 키의 해시 값에 따라 데이터가 샤드에 할당됩니다.