Kinesis Data Streams에서 긴 지연 시간 문제가 발생하는 이유는 무엇입니까?

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

데이터 레코드를 가져오는 동안 Amazon Kinesis 데이터 스트림의 지연 시간이 깁니다. 이런 현상이 발생하는 이유는 무엇이고 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

각 GET 요청의 레코드 수 또는 레코드 크기가 늘어나면 GetRecords.Latency가 증가할 수 있습니다. 생산자가 데이터를 스트림으로 수집하는 중에 애플리케이션을 다시 시작하려고 하면 레코드가 소비되지 않고 누적될 수 있습니다. 가져올 레코드 수 또는 데이터 양이 늘어나면 GetRecords.Latency 값이 증가합니다. 또한 애플리케이션이 수집 속도를 따라잡을 수 없는 경우 IteratorAge가 증가합니다.

참고: Kinesis 데이터 스트림에서 서버 측 암호화를 활성화하는 경우에도 지연 시간이 증가할 수 있습니다.

해결 방법

Amazon CloudWatch를 사용하여 Amazon Kinesis Data Streams 서비스 모니터링 GetRecords.Latency와 같은 CloudWatch 지표를 통해 지연 시간 증가가 지속적으로 나타나는지 확인합니다. 지연 시간 증가가 지속적으로 나타나는 경우 CloudWatch의 IncomingRecords, IncomingBytes, GetRecords.RecordsGetRecords.Bytes 지표도 증가하는지 확인합니다. 데이터 볼륨이 증가하면 이러한 지표도 증가하여 지연 시간이 길어집니다. 이 증가는 Kinesis 데이터 스트림에 사용 가능한 레코드가 증가할 때 GetRecords가 더 많은 레코드를 가져오기 때문에 발생합니다.

IteratorAge도 증가하는 경우 스트림에 유입되는 IncomingBytes가 증가한 것일 수 있습니다. CloudWatch의 IncomingBytes 지표를 확인하여 바이트 수가 증가했는지 확인합니다. 또한 스트림에 대한 GetRecords 호출 수가 적은지 확인할 수 있습니다. 수신 바이트가 많을수록 각 GetRecords 호출에서 더 많은 데이터를 검색하므로 GetRecords.Latency 값이 증가합니다.

IncomingBytes 또는 IncomingRecords가 증가하지 않았더라도 지연 시간이 여전히 길게 나타나는 경우 수신 데이터가 너무 많은 것이 문제일 수 있습니다. 소비자 애플리케이션이 수신 데이터를 따라잡을 수 없는 경우 Kinesis 데이터 스트림에 데이터가 계속 누적됩니다. 애플리케이션을 다시 시작하더라도 각 GetRecords 호출 내에서 더 많은 레코드를 가져옵니다. 각 GetRecords 호출에서 레코드 또는 가져오는 데이터가 증가하면 GetRecords.Latency 값이 증가합니다.

이 오류를 해결하려면 다음 문제 해결 단계를 수행하십시오.

  • 애플리케이션을 점검하여 수신 데이터 볼륨을 처리하는 데 충분한 GetRecords 호출이 이루어지고 있는지 확인합니다. Amazon Kinesis 클라이언트 라이브러리(KCL) 애플리케이션 또는 AWS Lambda를 소비자로 사용하는 경우 스트림의 샤드 수를 늘립니다. 샤드 수가 늘어나면 전송 스트림의 소비 속도가 증가하면서 IteratorAgeGetRecords.Latency 값이 감소합니다.
  • Kinesis 데이터 스트림의 보존 기간을 늘려 데이터 손실을 방지합니다. 보존 기간이 길수록 애플리케이션이 데이터 백로그를 따라잡는 데 도움이 될 수 있습니다.
  • 자체 소비자 애플리케이션이 있는 경우 처리 로직을 확인하고 처리 시간을 기록합니다.
  • 시스템의 중앙 처리 장치(CPU) 및 메모리 사용률을 확인하여 더 많은 메모리를 확보해야 하는지 점검합니다.

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

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?