Kinesis 데이터 스트림에서 지연 시간이 긴 문제가 발생하는 이유는 무엇인가요?

2분 분량
0

Amazon Kinesis 데이터 스트림이 데이터 레코드를 가져오는 동안 지연 시간이 긴 이유를 알고 싶습니다.

간략한 설명

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

참고: Kinesis 데이터 스트림에서 서버 측 암호화를 켜면 지연 시간이 늘어날 수 있습니다.

해결 방법

Amazon CloudWatch로 Kinesis 데이터 스트림 서비스를 모니터링할 수 있습니다. 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 Client Library(KCL) 애플리케이션 또는 AWS Lambda를 소비자로 사용하는 경우 스트림의 샤드 수를 늘리세요. 샤드 수가 증가하면 전송 스트림의 사용률이 증가하고 IteratorAgeGetRecords.Latency의 값은 감소합니다.
  • 데이터 손실을 방지하려면 Kinesis 데이터 스트림의 보존 기간을 늘리세요. 보존 기간이 길면 애플리케이션이 데이터 백로그를 처리하는 데 도움이 될 수 있습니다.
  • 소비자 애플리케이션이 있는 경우 처리 로직을 확인하고 처리 시간을 기록하세요.
  • 시스템의 중앙 처리 장치(CPU)와 메모리 사용률을 확인하여 추가 메모리를 확보해야 하는지 확인하세요.
AWS 공식
AWS 공식업데이트됨 4달 전