

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Kinesis Data Streams 생산자 최적화
Kinesis Data Streams 생산자 최적화

표시되는 특정 동작에 따라 Amazon Kinesis Data Streams 생산자를 추가로 최적화할 수 있습니다. 다음 주제를 검토하여 솔루션을 식별하세요.

**Topics**
+ [

# KPL 재시도 및 속도 제한 동작 사용자 지정
](kinesis-producer-adv-retries-rate-limiting.md)
+ [

# KPL 집계에 모범 사례 적용
](kinesis-producer-adv-aggregation.md)

# KPL 재시도 및 속도 제한 동작 사용자 지정
KPL 재시도 및 속도 제한 동작 사용자 지정

KPL `addUserRecord()` 작업을 사용하여 Amazon Kinesis Producer Library(KPL) 사용자 레코드를 추가하면 레코드에 타임스탬프가 제공되고 `RecordMaxBufferedTime` 구성 파라미터를 통해 설정한 기한과 함께 레코드가 버퍼에 추가됩니다. 이 타임스탬프/기한 조합은 버퍼 우선순위를 설정합니다. 다음 기준에 따라 레코드가 버퍼에서 플러시됩니다.
+ 버퍼 우선 순위
+ 집계 구성
+ 수집 구성

버퍼 동작에 영향을 주는 집계 및 수집 구성 파라미터는 다음과 같습니다.
+ `AggregationMaxCount`
+ `AggregationMaxSize`
+ `CollectionMaxCount`
+ `CollectionMaxSize`

플러시된 레코드는 Kinesis Data Streams API 작업 `PutRecords`에 대한 호출을 사용하여 Amazon Kinesis Data Streams 레코드로 Kinesis 데이터 스트림으로 전송됩니다. `PutRecords` 작업은 가끔 전체 또는 부분적 오류가 나타나는 스트림에 요청을 전송합니다. 실패한 레코드는 KPL 버퍼에 자동으로 다시 추가됩니다. 다음 두 가지 값 중 최소값을 기반으로 새로운 기한이 설정됩니다.
+ 현재 `RecordMaxBufferedTime` 구성의 절반
+ 레코드의 time-to-live 값

이 전략으로 Kinesis Data Streams 레코드의 time-to-live 값을 적용하면서 처리량을 높이고 복잡성을 줄이기 위해 재시도된 KPL 사용자 레코드를 후속 Kinesis Data Streams API 호출에 포함할 수 있습니다. 백오프 알고리즘이 없어 비교적 적극적인 재시도 전략입니다. 다음 단원에서 설명하는 속도 제한을 통해 과도한 재시도로 인한 스팸 발송을 방지합니다.

## 속도 제한


KPL에는 속도 제한 기능이 있어 단일 생산자가 전송하는 샤드당 처리량을 제한합니다. 속도 제한은 Kinesis Data Streams 레코드와 바이트 모두에 대해 별도의 버킷이 있는 토큰 버킷 알고리즘을 사용하여 구현됩니다. Kinesis 데이터 스트림에 성공적으로 쓸 때마다 특정 임곗값까지 각 버킷에 토큰이 한 개 또는 여러 개 추가됩니다. 이 임계값은 구성할 수 있지만 기본적으로 실제 샤드 제한보다 50퍼센트 높게 설정되어 단일 생산자의 샤드 포화를 허용합니다.

이 제한을 낮추어 과도한 재시도로 인한 스팸 발송을 줄일 수 있습니다. 그러나 모범 사례는 각 생산자가 최대 처리량을 적극적으로 재시도하고, 스트림의 용량을 확장하고 적절한 파티션 키 전략을 구현하여 과하다고 판단되는 결과를 조절하는 것입니다.

# KPL 집계에 모범 사례 적용


생성된 Amazon Kinesis Data Streams 레코드의 시퀀스 번호 체계가 동일하게 유지되는 동안 집계는 집계된 Kinesis Data Streams 레코드에 포함된 Amazon Kinesis Producer Library(KPL) 사용자 레코드의 인덱싱을 0에서 시작합니다. 그러나 시퀀스 번호를 사용하여 KPL 사용자 레코드를 고유하게 식별하지 않는 한 집계(KPL 사용자 레코드를 Kinesis Data Streams 레코드로) 및 분해(Kinesis Data Streams 레코드를 KPL 사용자 레코드로)로 이 작업이 자동 처리되므로 코드는 이를 무시할 수 있습니다. 이는 소비자가 KCL을 사용하는지 AWS SDK를 사용하는지에 관계없이 적용됩니다. 이 집계 기능을 사용하려면 소비자가 AWS SDK에 제공된 API를 사용하여 작성된 경우 KPL의 Java 부분을 빌드로 가져와야 합니다.

시퀀스 번호를 KPL 사용자 레코드의 고유 식별자로 사용하려면 KPL 사용자 레코드를 비교할 수 있도록 `Record` 및 `UserRecord`에서 제공하는 계약 준수 `public int hashCode()` 및 `public boolean equals(Object obj)` 작업을 사용하는 것이 좋습니다. 또한 KPL 사용자 레코드의 하위 시퀀스 번호를 검사하려면 `UserRecord` 인스턴스로 해당 레코드를 캐스팅하고 하위 시퀀스 번호를 검색할 수 있습니다.

자세한 내용은 [소비자 분해 구현](kinesis-kpl-consumer-deaggregation.md) 단원을 참조하십시오.