Kinesis Data Streams의 IteratorAgeMilliseconds 값이 계속 증가하는 이유는 무엇인가요?

4분 분량
0

Amazon Kinesis Data Streams에서 IteratorAgeMilliseconds 지표가 계속 증가합니다.

간략한 설명

Kinesis Data Streams의 IteratorAgeMilliseconds 지표는 다음과 같은 이유로 증가할 수 있습니다.

  • 느린 레코드 처리
  • 읽기 스로틀
  • AWS Lambda 함수 오류
  • 연결 제한 시간 초과
  • 샤드 간의 고르지 않은 데이터 분포

해결 방법

느린 레코드 처리

소비자 처리 로직의 오버로드로 인해 레코드 처리 속도가 느려질 수 있습니다. 소비자가 Amazon Kinesis Client Library(KCL)를 사용하여 구축된 경우 다음과 같은 근본 원인을 확인하십시오.

  • 물리적 리소스 부족: 피크 수요 중에 메모리 또는 CPU 사용률과 같은 물리적 리소스가 인스턴스에 충분한지 확인합니다.
  • 크기 조정 실패: 소비자 레코드 처리 로직은 Amazon Kinesis 데이터 스트림의 로드가 증가함에 따라 크기 조정에 실패할 수 있습니다. KCL에서 내보낸 다른 사용자 지정 Amazon CloudWatch 지표를 모니터링하여 크기 조정 실패를 확인할 수 있습니다. 이러한 지표는 processTask, RecordProcessor.processRecords.Time, SuccessRecordsProcessed 작업에 연결됩니다. 또한 CloudWatch 지표 IncomingBytesIncomingRecords를 모니터링하여 Kinesis 데이터 스트림의 전체 처리량을 확인할 수도 있습니다. KCL 및 사용자 지정 CloudWatch 지표에 대한 자세한 내용은 Amazon CloudWatch를 사용하여 Kinesis Client Library 모니터링을 참조하세요. 그러나 처리 시간을 줄일 수 없는 경우 샤드 수를 늘려 Kinesis 스트림을 확장하는 것이 좋습니다.
  • 중복 처리 증가: 소비자의 레코드 처리 로직을 확인해 보세요. 증가된 트래픽 로드와 상관 관계가 없는 processRecords.Time 값이 증가할 경우 레코드 처리 로직을 확인하세요. 레코드 처리 로직이 소비자 레코드 처리에 지연을 초래할 수 있는 동기식 차단 호출을 수행하고 있을 수 있습니다. 이 문제를 완화하는 또 다른 방법은 Kinesis Data Streams의 샤드 수를 늘리는 것입니다. 필요한 샤드 수에 대한 자세한 내용은 리샤딩, 조정 및 병렬 처리를 참조하세요.
  • GetRecords 요청 부족: 소비자가 GetRecords 요청을 충분히 자주 전송하지 않는 경우 소비자 애플리케이션이 지연될 수 있습니다. 확인하려면 KCL 구성(withMaxRecordswithIdleTimeBetweenReadsInMillis)을 확인하세요.
  • 불충분한 처리량 또는 높은 MillisBehindLatest: SQL용 Amazon Kinesis Data Analytics를 사용하는 경우 문제 해결 단계는 불충분한 처리량 또는 높은 MillisBehindLatest 또는 소비자 레코드 처리가 지연됨을 참조하세요.

소비자의 데이터 사용이 늦어져 데이터 만료 위험이 있는 경우 스트림의 보존 기간을 늘리세요. 기본적으로 보존 기간은 24시간이며 최대 1년까지 구성할 수 있습니다. 데이터 보존 기간에 대한 자세한 내용은 데이터 보존 기간 변경을 참조하세요.

읽기 스로틀

ReadProvisionedThroughputExceeded 지표를 통해 스트림에 읽기 조절이 있는지 확인합니다.

한 명 이상의 소비자가 초당 5개의 GetRecords 호출 제한을 위반하면 읽기 스로틀이 발생할 수 있습니다. Kinesis 스트림의 읽기 제한에 대한 자세한 내용은 Kinesis Data Streams에서 ReadProvisionedThroughputExceeded 예외 문제를 감지 및 해결하려면 어떻게 해야 하나요?를 참조하세요.

Lambda 함수 오류

CloudWatch에서 IteratorAgeMilliseconds 수가 계속 증가하는 스트림에 대한 Lambda 함수를 검토합니다. CloudWatch의 오류 요약을 검토하여 IteratorAgeMilliseconds 값이 증가한 오류를 식별할 수 있습니다. 느린 처리는 Lambda 트리거의 구성(예: 낮은 배치 크기), 차단 중인 통화 또는 Lambda 메모리 프로비저닝으로 인해 발생할 수 있습니다. Lambda 함수 오류의 타임스탬프가 Kinesis 데이터 스트림의 IteratorAgeMilliseconds 지표 증가 시간과 일치하는지 확인합니다. 타임스탬프와 일치하면 증가의 원인을 확인할 수 있습니다. 자세한 내용은 Lambda 함수 옵션 구성을 참조하세요.

참고: Lambda 함수가 재시도되기 때문에 오류가 발생할 수 있습니다. Lambda 함수는 Kinesis의 소비자로서 레코드를 건너뛰지 않기 때문에 재시도됩니다. 이러한 레코드를 재시도하면 처리 지연도 증가합니다. 그러면 소비자가 스트림보다 늦어져 IteratorAgeMilliseconds 지표가 증가합니다.

간헐적인 연결 제한 시간 초과

소비자 애플리케이션은 Kinesis 데이터 스트림에서 레코드를 풀링하는 동안 연결 제한 시간 초과 문제가 발생할 수 있습니다. 간헐적인 연결 제한 시간 오류로 인해 IteratorAgeMilliseconds 수가 크게 증가할 수 있습니다.

증가가 연결 제한 시간과 관련되어 있는지 확인하려면 GetRecords.LatencyGetRecords.Success 지표를 확인하십시오. 두 지표도 모두 영향을 받는 경우 연결이 복원된 후 IteratorAgeMilliseconds 수가 증가하지 않습니다.

샤드 간의 고르지 않은 데이터 분포

Kinesis 데이터 스트림의 일부 샤드는 다른 샤드보다 더 많은 레코드를 수신할 수 있습니다. 이는 Put 작업에 사용되는 파티션 키가 샤드 전체에 데이터를 균등하게 분배하지 않기 때문입니다. 이렇게 고르지 않은 데이터 배포로 인해 Kinesis 데이터 스트림 샤드에 대한 병렬 GetRecords 호출이 줄어들어 IteratorAgeMilliseconds 수가 증가합니다.

임의 파티션 키를 사용하여 스트림의 샤드에 데이터를 균등하게 분배할 수 있습니다. 임의 파티션 키는 소비자 애플리케이션이 레코드를 더 빠르게 읽는 데 도움이 될 수 있습니다.


관련 정보

Lambda 이벤트 소스 매핑

Kinesis Data Streams 소비자 문제 해결

Amazon Kinesis에서 AWS Lambda 사용

AWS 공식
AWS 공식업데이트됨 10달 전