클라우드(AWS)/DVA-C03

[AWS] Kinesis Steam의 Shard란? 쉽게 정리 (Provisioned Throughput ExceededException이 있을 경우)

찌르비 2024. 11. 3. 13:01
반응형

 

Kinesis의 Shard

Amazon Kinesis에서 "Shard"데이터 스트림의 기본 단위이다.

"Shard"는 Stream 내에서 데이터의 전송 및 처리의 단위를 제공한다. 그리고 Kinesis에서 데이터를 효율적으로 관리하고 처리하는 데 필수적인 역할을 한다.

  • 독립적인 데이터 처리: 각 샤드는 별개의 데이터 스트림을 유지하여 병렬로 데이터를 처리할 수 있다.
  • 처리 용량: 각 샤드는 초당 최대 1,000개의 데이터를 쓸 수 있고, 5개의 데이터를 읽을 수 있다. 필요에 따라 샤드를 추가해 처리 능력을 확장할 수 있다.
  • 순서 보장: 같은 샤드에 기록된 데이터는 순서를 유지하지만, 다른 샤드 간에는 순서가 보장되지 않는다.
  • Shard Iterator: 데이터를 읽기 위해 사용하는 포인터로, 샤드 내에서 특정 데이터에 접근할 수 있게 해준다.

🤔 문제

 

애플리케이션이 Amazon Kinesis를 사용하여 클릭(Click) 스트림 데이터를 처리하고 있습니다. 이 클릭스트림 데이터는 주기적으로 스파이크(급증)를 겪고 있습니다. PutRecords API 호출이 때때로 실패하며, 로그에는 실패한 호출이 다음과 같은 응답을 반환하는 것으로 나타납니다:

{
  "FailedRecordCount": 1,
  "Records": [
    {
      "SequenceNumber": "21269319989900637946712965403778482371", 
      "ShardId": "shardId-000000000001"
    },
    {
      "ErrorCode": "Provisioned Throughput ExceededException",
      "ErrorMessage": "Rate exceeded for shard shardId-000000000001 in stream exampleStreamName under account 123456789."
    },
    {
      "SequenceNumber": "21269319989999637946712965403778482985", 
      "ShardId": "shardId-000000000002"
    }
  ]
}

 

이 문제를 완화하는 데 도움이 되는 기술은 무엇인가요? (두 가지를 선택하세요.)

 

  1. Exponential backoff를 사용하여 요청을 재시도한다
  2. PutRecords 대신 PutRecord API를 사용합니다.
  3. 요청 빈도 (와/또는) 크기를 줄입니다.
  4. Kinesis 대신 Amazon SNS를 사용합니다.
  5. KCL 소비자의 수를 줄입니다.

 

정답 & 오답

더보기

정답. 1번, 3번

 

설명:

로그에는 "Provisioned Throughput ExceededException" 오류가 표시되고 있다. 
이는 Kinesis Stream의 Shard가 데이터 처리량 한도를 초과했음을 의미한다. (스트림에 대한 요청 비율이 너무 높거나 데이터가 가용 처리량에 비해 너무 크다)

이 문제를 해결하려면 요청의 속도나 빈도를 줄이거나, 실패한 요청을 다시 시도하는 방법이 필요하다.

참고: https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html

 

PutRecords - Amazon Kinesis Data Streams Service

When invoking this API, you must use either the StreamARN or the StreamName parameter, or both. It is recommended that you use the StreamARN input parameter when you invoke this API.

docs.aws.amazon.com

https://repost.aws/knowledge-center/kinesis-data-stream-throttling

 

Understand why your Kinesis Data Streams are throttling

I want to know why my Amazon Kinesis Data Streams are throttling.

repost.aws

 

 

 

1번. Exponential backoff를 사용하여 요청을 재시도한다
Provisioned Throughput ExceededException은 샤드의 처리량 제한을 초과할 때 발생하므로, 실패한 요청을 즉시 다시 시도하기보다는 일정 시간 대기 후 점진적으로 대기 시간을 늘려가며 재시도하는 방식(Exponential backoff)을 사용하면 도움이 된다. 이렇게 하면 급증하는 요청을 완화하고 샤드의 부담을 줄일 수 있다.

3번. 요청 빈도 (와/또는) 크기를 줄입니다.
요청 빈도나 데이터 크기를 줄이면 Kinesis가 과부하 없이 요청을 처리할 수 있어 예외 발생을 줄이는 데 도움이 된다

 

 

728x90
반응형