Amazon Kinesis Data Streams이 스트롤링되는 이유를 알고 싶습니다.
간략한 설명
지표가 Kinesis Data Streams 쿼터 내에 있지만 다음과 같은 이유로 스트림이 스로틀링될 수 있습니다.
- ProvisionedThroughputExceededException 또는 LimitExceededException 오류 코드가 수신됩니다. 자세한 내용은 API 제한을 참고하세요.
- 스트림에 대해 향상된 Kinesis 스트림 모니터링이 꺼져 있습니다.
- 숨겨진 마이크로 스파이크가 Amazon CloudWatch 지표에 있습니다.
- CloudWatch 지표는 성공적인 작업만 보고하고 실패한 작업은 제외합니다.
해결 방법
프로비저닝된 처리량 초과 예외 또는 제한 초과 예외 오류 코드가 표시됩니다.
GetRecords 또는 PutRecords API를 사용하는 경우, 스트림에서 ProvisionedThroughputExceededException 또는 LimitExceededException 스로틀링 오류가 발생할 수 있습니다.
다음 시나리오에서도 이러한 오류가 발생할 수 있습니다.
- Kinesis 스트림에 기록된 레코드 수가 스트림 할당량을 초과합니다.
- 파티션 키를 포함한 레코드 크기가 1MB를 초과합니다.
- 총 처리량(바이트)이 Kinesis 스트림 제한을 초과합니다.
- 프로듀서가 스트림에 너무 많은 빠른 쓰기 요청을 합니다. 이 문제는 일반적으로 ‘속도 저하’ 또는 ‘속도 초과’ 오류로 표시됩니다.
1분 데이터 포인트에서 값을 가져와 60으로 나눌 수도 있습니다. 이렇게 하면 특정 기간 내에 스로틀링이 발생하는지 여부를 판단하는 데 도움이 되는 초당 평균값을 얻을 수 있습니다. 성공 횟수가 할당량을 초과하지 않으면 IncomingRecords 지표를 WriteProvisionedThroughputExceeded 메트릭에 추가하고 계산을 다시 시도합니다. IncomingRecords 지표는 성공 또는 수락된 레코드를 나타냅니다. WriteProvisionedThroughputExceeded 지표는 스로틀링된 레코드 수를 나타냅니다.
참고: 프로듀서에서 전송되는 레코드의 크기와 수를 확인합니다. 들어오는 레코드와 스로틀링된 레코드의 합이 스트림 할당량보다 크면 레코드 크기 또는 수를 변경합니다.
PutRecord 또는 PutRecord.Success 지표는 실패한 작업도 나타냅니다. 성공 지표가 떨어지면 데이터 생산자 로그를 검토하여 실패의 근본 원인을 찾아보세요. 스로틀링이 발생하면 데이터 생산자 측에서 로깅을 설정하여 제출된 레코드의 총 수와 크기를 확인합니다. PutRecord.Success 또는 PutRecords.Success 메트릭의 총 레코드 수가 스트림 할당량을 초과하면 Kinesis 스트림이 스로틀링됩니다.
스트림에 대해 향상된 키네시스 스트림 모니터링이 꺼져 있습니다.
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.
Kinesis 스트림의 일부 샤드는 다른 샤드보다 더 많은 레코드를 수신할 수 있습니다. 분포가 고르지 않으면 스로틀링 오류가 발생하여 핫 샤드가 발생할 수 있습니다. 핫 샤드는 PUT 작업에 사용되는 파티션 키가 Kinesis 스트림의 샤드 전체에 레코드를 균등하게 분배하지 않음을 나타냅니다.
고급 모니터링을 끄면 스트림 수준 지표가 모든 샤드에 걸쳐 집계되므로 핫 샤드가 메트릭에서 숨겨질 수 있습니다. 고급 스트림 모니터링을 끄면 스트림을 개별적으로 검사할 수 없습니다. 샤드별로 스트림을 검사하려면 enable-enhanced-monitoring 명령을 실행합니다.
IncomingBytes 평균값과 최대값을 비교하여 스트림에 핫 샤드가 있는지 확인할 수도 있습니다. 고급 모니터링을 켜면 평균에서 벗어난 샤드도 확인할 수 있습니다. 자세한 내용은 리샤딩을 위한 전략을 참고하세요.
랜덤 파티션 키 사용
핫 샤드가 Kinesis 스트림에 있는 경우, 임의의 파티션 키를 사용하여 레코드를 그룹화하세요. 작업에서 이미 임의 파티션 키를 사용하고 있다면 키를 조정하여 배포를 수정하세요. 그런 다음 키에서 IncomingBytes 및 IncomingRecords와 같은 메트릭의 변경 사항을 모니터링합니다. 최대 패턴과 평균 패턴이 비슷하다면 핫 샤드가 없는 것입니다.
숨겨진 마이크로 스파이크는 CloudWatch 메트릭에 있습니다.
스트림 할당량을 초과하는 마이크로 스파이크 또는 지표를 식별하려면 전체 레코드 또는 사용자 지정 코드를 기록하여 스트림을 계산하고 레코드 크기를 확인합니다. 그런 다음 Kinesis 스트림으로 전송되는 레코드의 수와 크기를 평가하여 데이터 할당량을 초과하는 스파이크를 식별하세요.
Kinesis 데이터 스트림 할당량은 샤드당 및 초당으로 결정됩니다. CloudWatch에서 60초 시간 제한을 초과하여 값이 집계되면, Kinesis 데이터 스트림 할당량을 초과하는 마이크로 스파이크가 발생할 수 있습니다. 또한 지표가 60초 동안 집계되기 때문에 1분 내의 전체 레코드 수가 낮게 보일 수 있습니다. 그러나 1분 내 임의의 초 단위의 기록은 더 높은 수치를 나타냅니다. 트래픽이 스트림 할당량보다 낮은 것으로 표시될 수 있지만 해당 초 내에 스로틀링된 샤드는 스트림에 스로틀링으로 나타납니다.
CloudWatch 메트릭에 할당량 예외 또는 데이터의 미세 급증이 표시되지 않는 경우 다음 작업을 완료하세요.
CloudWatch 지표는 성공적인 작업만 보고하고 실패한 작업은 제외합니다.
Kinesis 지표는 스트림에서 성공한 작업만 기록합니다. Kinesis 스트림에는 스로틀링된 작업이 포함되지 않을 수 있습니다. 그러면 스트림 할당량이 초과되지만 메트릭에 예외가 표시되지 않습니다.
실패한 레코드가 Kinesis 스트림에 들어갈 수 없는 경우 스트림이 스로틀됩니다. 재시도 동작이 프로듀서에 있는 경우 실패한 레코드가 다시 시도됩니다. 그러면 프로세스가 지연될 수 있습니다.
너무 많은 레코드가 Kinesis 스트림으로 전송되고 있는지 확인하려면 총 수신 레코드 수에 스로틀링된 레코드 수를 더하세요.
관련 정보
전용 처리량(향상된 팬아웃)으로 맞춤형 소비자 개발
Amazon CloudWatch를 통한 Amazon Kinesis Data Streams 서비스 모니터링
향상된 모니터링 비활성화