Kinesis Data Streams의 IteratorAgeMilliseconds 값이 계속 증가하는 이유는 무엇입니까?

최종 업데이트 날짜: 2020년 5월 6일

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 스트림을 확장하는 것이 좋습니다.
  • 데이터 만료: 소비자의 데이터 사용이 늦어져 데이터 만료 위험이 있는 경우 스트림의 보존 기간을 늘립니다. 기본적으로 보존 기간은 24시간이며 최대 7일까지 구성할 수 있습니다. 데이터 보존 기간에 대한 자세한 내용은 데이터 보존 기간 변경을 참조하십시오.
  • 중복 처리 증가: 소비자의 레코드 처리 로직을 확인해 보십시오. 증가된 트래픽 로드와 상관 관계가 없는 processRecords.Time 값이 증가하면 레코드 처리 로직을 확인합니다. 레코드 처리 로직이 소비자 레코드 처리에 지연을 초래할 수 있는 동기식 차단 호출을 수행하고 있을 수 있습니다. 이 문제를 완화하는 또 다른 방법은 Kinesis Data Streams의 샤드 수를 늘리는 것입니다. 필요한 샤드 수에 대한 자세한 내용은 리샤딩, 크기 조정 및 병렬 처리를 참조하십시오.
  • GetRecords 요청 부족: 소비자가 GetRecords 요청을 충분히 자주 전송하지 않는 경우 소비자 애플리케이션이 지연될 수 있습니다.

읽기 스로틀

ReadProvisionedThroughputExceeded 지표를 통해 스트림에 읽기 조절이 있는지 확인합니다. Kinesis 스트림의 읽기 조절에 대한 자세한 내용은 Amazon CloudWatch를 사용하여 Amazon Kinesis Data Streams 서비스 모니터링을 참조하십시오.

Lambda 함수 오류

Amazon CloudWatch에서 IteratorAgeMilliseconds 수가 계속 증가하는 스트림에 대한 Lambda 함수를 검토합니다. CloudWatch의 오류 요약을 검토하여 IteratorAgeMilliseconds 값이 증가한 오류를 식별할 수 있습니다. Lambda 함수 오류의 타임스탬프가 Kinesis 데이터 스트림의 IteratorAgeMilliseconds 지표 증가 시간과 일치하는지 확인합니다. 타임스탬프와 일치하면 증가의 원인을 확인할 수 있습니다.

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

연결 제한 시간

Lambda 함수는 Kinesis 데이터 스트림에서 레코드를 풀링하는 동안 연결 제한 시간 문제가 발생할 수 있습니다. 연결 제한 시간으로 인해 IteratorAgeMilliseconds 수가 크게 증가할 수 있습니다.

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


이 문서가 도움이 되었습니까?

개선할 부분이 있습니까?


다른 도움이 필요하십니까?