Kinesis Data Firehose가 S3에 너무 많은 작은 파일을 생성하는 이유는 무엇입니까?

최종 업데이트 날짜: 2020년 11월 10일

Amazon Kinesis Data Firehose에서 Amazon Simple Storage Service(Amazon S3)로 데이터를 푸시하려고 합니다. 하지만 Kinesis Data Firehose가 Amazon S3 버킷에 작은 파일을 많이 만들고 있습니다. 이유가 무엇입니까?

간략한 설명

Kinesis Data Firehose는 다음과 같은 이유로 Bufferinghints API에서 지정된 레코드보다 작은 레코드를 전달합니다.

  • 압축이 활성화되어 있습니다.
  • Kinesis Data Firehose 전송 스트림이 확장되었습니다.
  • Amazon Kinesis 데이터 스트림이 데이터 원본으로 나열됩니다.

해결 방법

압축이 활성화되었습니다.

Kinesis Data Firehose 전송 스트림에서 압축이 활성화된 경우 압축 전에 두 개의 Bufferinghints 파라미터가 모두 적용됩니다. SizeInMBIntervalInSeconds 파라미터를 통해 확인합니다.

레코드의 각 배치가 버퍼링된 후, 파라미터가 적용됩니다. 데이터 레코드가 버퍼링되고 압축되면 Amazon S3에 더 작은 파일이 생성됩니다.

Kinesis Data Firehose 전송 스트림이 확장되었습니다.

한도 증가가 요청되었거나 Kinesis Data Firehose가 자동으로 확장되면 Data Firehose 전송 스트림이 확장될 수 있습니다. 기본적으로 Kinesis Data Firehose는 전송 스트림을 특정 한도까지 자동으로 확장합니다. Amazon Kinesis의 자동 조정 동작은 한도를 늘리지 않고도 조절 가능성을 줄입니다.

Kinesis Data Firehose의 전송 스트림이 확장되면 Data Firehose의 버퍼링 힌트에 영향을 줄 수 있습니다. 전송 스트림의 전체 버퍼 크기(sizeInMB)는 반비례적으로 축소됩니다. 예를 들어 Kinesis Data Firehose의 용량이 원래 버퍼 크기 한도보다 2배 증가하면 버퍼 크기가 절반으로 줄어듭니다. Kinesis Data Firehose가 최대 4배까지 확장되면 버퍼 크기가 전체 버퍼 크기의 1/4로 줄어듭니다.

또한 Kinesis Data Firehose 전송 스트림에는 비례적인 병렬 버퍼링 수가 있으며, 여기서 데이터는 모든 버퍼에서 동시에 전달됩니다. 예를 들어, Kinesis Data Firehose는 데이터를 버퍼링하고 버퍼 크기 한도에 따라 단일 파일을 만들 수 있습니다. Kinesis Data Firehose가 버퍼 한도를 두 배로 늘리면 두 개의 개별 채널이 동일한 시간 간격 내에 파일을 생성합니다. Kinesis Data Firehose가 최대 4배까지 확장되는 경우, 동일한 시간 간격 동안 S3에 4개의 파일을 생성하는 네 개의 다른 채널이 있습니다.

예: 데이터 스트림 한도 계산

또 다른 예로, 초기 처리량(t)이 있고 (x)초 간격으로 파일 크기(s)를 생성하는 Amazon Kinesis 데이터 스트림을 가정해 보겠습니다. 동일한 Kinesis Data Firehose 전송 스트림(처리량 4t)이 동일한 시간 간격 내에 파일(크기가 s/4)을 생성합니다. 데이터를 전달하는 4개의 병렬 버퍼도 있습니다. 결과적으로 Kinesis Data Firehose에서 전송하는 데이터는 거의 동일한 크기로 유지됩니다.

4 * (s/4) = s

초기 처리량(t)이 5MB/초인 Kinesis 데이터 스트림을 고려하십시오. Kinesis 스트림은 60(x)초 간격으로 40MB 크기의 파일(s)을 만듭니다.

4 * (40MB/4) = 40MB

Kinesis 데이터 스트림이 최대 20MB/초(네 번)까지 확장되면 스트림은 각각 약 10MB의 서로 다른 파일을 네 개 만듭니다. 따라서 Kinesis Data Firehose 전송 스트림에서 전달되는 총 데이터 크기는 약 40MB입니다.

Kinesis Data Firehose 전송 스트림이 기본 한도를 초과하여 확장되지 않았는지 확인합니다. Kinesis Data Firehose 전송 스트림의 현재 한도를 확인하려면 다음 Amazon CloudWatch 지표를 확인하십시오.

  • BytesPerSecondLimit
  • RecordsPerSecondLimit
  • PutRequestsPerSecondLimit

이러한 지표의 값이 기본 할당량 한도와 다르면 Kinesis Data Firehose의 전송 스트림이 확장되었음을 나타냅니다.

Kinesis 데이터 스트림이 데이터 원본으로 나열됩니다.

Kinesis 데이터 스트림이 Kinesis Data Firehose의 데이터 원본으로 나열되면 Data Firehose가 내부적으로 확장됩니다. 기본적으로 Kinesis Data Firehose는 Kinesis 데이터 스트림의 볼륨 용량을 충족하려고 시도합니다. 이 확장을 통해 버퍼링 크기가 변경되고 크기가 작은 레코드가 전송될 수 있습니다.

참고: 버퍼링 힌트 옵션은 힌트로 처리됩니다. 따라서 Kinesis Data Firehose는 버퍼링을 최적화하기 위해 다른 값을 사용하도록 선택할 수 있습니다.</p


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?