

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

# Amazon Kinesis Data Streams 생산자 문제 해결
<a name="troubleshooting-producers"></a>

**Topics**
+ [생산자 애플리케이션이 예상보다 느린 속도로 쓰고 있는 경우](#producer-writing-at-slower-rate)
+ [승인되지 않은 KMS 마스터 키 권한 오류가 발생하는 경우](#unauthorized-kms-producer)
+ [생산자에 대한 기타 일반적인 문제 해결](#misc-troubleshooting-producer)

## 생산자 애플리케이션이 예상보다 느린 속도로 쓰고 있는 경우
<a name="producer-writing-at-slower-rate"></a>

**Topics**
+ [서비스 제한 초과](#service-limits-exceeded)
+ [생산자를 최적화하고 싶은 경우](#producer-optimization)
+ [`flushSync()` 작업 오용](#misuse-tag)

### 서비스 제한 초과
<a name="service-limits-exceeded"></a>

서비스 제한이 초과되는지 여부를 확인하려면, 생산자가 서비스에 대해 처리량 예외를 발생하는지 여부를 확인하고 병목 현상이 발생한 API 작업을 검사합니다. 호출에 따라 여러 제한이 있음을 유의하십시오([할당량 및 제한](service-sizes-and-limits.md) 참조). 예를 들어, 가장 잘 알려진 쓰기 및 읽기에 대한 샤드 수준 제한 외에도 다음과 같은 스트림 수준 제한이 있습니다.
+ [CreateStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_CreateStream.html)
+ [DeleteStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DeleteStream.html)
+ [ListStreams](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListStreams.html)
+ [GetShardIterator](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html)
+ [MergeShards](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_MergeShards.html)
+ [DescribeStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStream.html)
+ [DescribeStreamSummary](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStreamSummary.html)

`CreateStream`, `DeleteStream`, `ListStreams`, `GetShardIterator` 및 `MergeShards` 작업은 초당 호출 5번으로 제한됩니다. `DescribeStream` 작업은 초당 호출 10번으로 제한됩니다. `DescribeStreamSummary` 작업은 초당 호출 20번으로 제한됩니다.

이러한 호출이 문제가 되지 않는 경우, 모든 샤드에 균등하게 *넣기* 작업을 배포할 수 있는 파티션 키를 선택했는지 및 나머지 파티션이 서비스 제한에 도달하지 않았을 때 특정 파티션 키가 서비스 제한에 도달했는지를 확인하십시오. 이렇게 하려면 최대 처리량을 측정하고 스트림의 샤드 수를 고려해야 합니다. 스트림 관리에 대한 자세한 내용은 [Kinesis 데이터 스트림 생성 및 관리](working-with-streams.md) 단원을 참조하십시오.

**작은 정보**  
단일 레코드 작업 [PutRecord](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html)를 사용할 때는 처리량 제한 계산을 가장 가까운 킬로바이트로 올림해야 하는 반면, 멀티 레코드 작업 [PutRecords](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html)에서는 각 호출에서 레코드의 누적 합계를 반올림해야 합니다. 예를 들어, 크기가 1.1KB인 레코드 600개의 `PutRecords` 요청은 병목 현상이 발생하지 않습니다.

### 생산자를 최적화하고 싶은 경우
<a name="producer-optimization"></a>

생산자 최적화를 시작하기 전에 다음 핵심 작업을 완료하세요. 먼저 레코드 크기와 초당 레코드를 기준으로 원하는 최대 처리량을 식별합니다. 그런 다음 스트림 용량을 제한 요인([서비스 제한 초과](#service-limits-exceeded))으로 배제합니다. 스트림 용량을 배제한 경우, 두 가지 일반적인 생산자 유형에 대해 다음의 문제 해결 팁과 최적화 지침을 사용하십시오.

**대규모 생산자**

대규모 생산자는 일반적으로 온프레미스 서버 또는 Amazon EC2 인스턴스에서 실행됩니다. 대규모 생산자로부터 더 높은 처리량을 필요로하는 고객은 일반적으로 초당 지연 시간을 고려합니다. 지연 시간을 처리하는 전략에는 다음 사항이 포함됩니다. 고객이 레코드를 마이크로 배치/버퍼 처리할 수 있는 경우 [Amazon Kinesis Producer Library](https://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-kpl.html)(고급 집계 로직이 있음) 또는 멀티 레코드 작업 [PutRecords](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html)를 사용하거나, 레코드를 더 큰 파일로 집계한 후 단일 레코드 작업 [PutRecord](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html)를 사용합니다. 배치/버퍼를 사용할 수 없는 경우 여러 스레드를 사용하여 동시에 Kinesis Data Streams 서비스에 씁니다. AWS SDK for Java 및 기타 SDKs에는 매우 적은 코드로이 작업을 수행할 수 있는 비동기 클라이언트가 포함되어 있습니다.

**소규모 생산자**

소규모 생산자는 일반적으로 모바일 앱, IoT 디바이스 또는 웹 클라이언트입니다. 모바일 앱인 경우 AWS Mobile SDKs에서 `PutRecords` 작업 또는 Kinesis Recorder를 사용하는 것이 좋습니다. 자세한 내용은 AWS Mobile SDK for Android 시작 안내서 및 시작 안내서 AWS Mobile SDK for iOS 를 참조하세요. 모바일 앱은 간헐적 연결을 본질적으로 처리해야 하며, `PutRecords`와 같은 일종의 배치 넣기를 필요로 합니다. 몇 가지 사유로 인해 배치를 사용할 수 없는 경우 위의 대규모 생산자 정보를 참조하십시오. 생산자가 브라우저인 경우 생성되는 데이터의 양은 일반적으로 매우 작습니다. 그러나 *넣기* 작업을 애플리케이션의 중요한 경로에 넣는 것이므로 아 방법은 권장되지 않습니다.

### `flushSync()` 작업 오용
<a name="misuse-tag"></a>

`flushSync()`를 잘못 사용하면 쓰기 성능에 중대한 영향을 미칠 수 있습니다. `flushSync()` 작업은 KPL 애플리케이션이 종료되기 전에 버퍼링된 모든 레코드가 전송되도록 종료 시나리오를 위해 설계되었습니다. 모든 쓰기 작업 후에 이 작업을 구현하면 쓰기당 약 500ms의 상당한 지연 시간이 추가될 수 있습니다. 쓰기 성능에서 불필요한 추가 지연을 방지하려면 애플리케이션 종료에 대해서만 `flushSync()`를 구현해야 합니다.

## 승인되지 않은 KMS 마스터 키 권한 오류가 발생하는 경우
<a name="unauthorized-kms-producer"></a>

생산자 애플리케이션이 KMS 마스터 키에 대한 권한 없이 암호화된 스트림에 작성하는 경우 이 오류가 발생합니다. KMS 키에 대한 액세스 권한을 애플리케이션에 할당하려면 [AWS KMS에서 키 정책 사용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) 및 [AWS KMS에서 IAM 정책 사용](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html)을 참조하세요.

## 생산자에 대한 기타 일반적인 문제 해결
<a name="misc-troubleshooting-producer"></a>
+ [Kinesis 데이터 스트림이 500 내부 서버 오류를 반환하는 이유는 무엇인가요?](https://aws.amazon.com/premiumsupport/knowledge-center/kinesis-data-stream-500-error/)
+ [FFlink에서 Kinesis Data Streams로 작성 시 발생하는 시간 초과 오류를 해결하려면 어떻게 해야 합니까?](https://aws.amazon.com/premiumsupport/knowledge-center/kinesis-flink-timeout/)
+ [Kinesis Data Streams에서 제한 오류를 해결하려면 어떻게 해야 합니까?](https://aws.amazon.com/premiumsupport/knowledge-center/kinesis-data-stream-throttling-errors/)
+ [Kinesis 데이터 스트림이 제한되는 이유는 무엇인가요?](https://aws.amazon.com/premiumsupport/knowledge-center/kinesis-data-stream-throttling/)
+ [KPL을 사용하여 Kinesis 데이터 스트림에 데이터 레코드를 넣으려면 어떻게 해야 하나요?](https://aws.amazon.com/premiumsupport/knowledge-center/kinesis-data-stream-kpl/)