Amazon DynamoDB가 Amazon Kinesis Data Streams과 상호 작용하는 방식을 최적화하고 문제를 해결하고 싶습니다.
간략한 설명
다음은 DynamoDB 테이블과 함께 Kinesis Data Streams을 사용할 때 발생할 수 있는 일반적인 문제입니다.
- Kinesis Data Streams 레코드가 실패합니다.
- 비용이 많이 들거나 변동이 심합니다.
문제를 해결하는 데 도움이 되도록 AWS CloudTrail 로그를 검토하고 Amazon CloudWatch에서 Kinesis Data Stream 지표를 모니터링하십시오.
참고: DynamoDB 및 Kinesis 스트림의 데이터에 대한 기본 저장 기간은 24시간으로 설정되어 있습니다. 하지만 스트림의 보존 기간을 연장하여 최대 1년(365일 또는 8,760시간) 동안 데이터를 보관할 수 있습니다.
해결 방법
실패한 레코드 문제 해결
기록이 실패하는 이유를 확인하려면 CloudTrail 로그를 검토하십시오. 레코드가 실패할 수 있는 일반적인 이유는 다음과 같습니다.
- 올바른 AWS Identity and Access Management (IAM) 권한이 없기 때문에 AccessDeniedException 오류가 표시됩니다. 이 문제를 해결하려면 IAM 역할의 권한 정책을 수정하십시오.
- 스로틀링으로 인해 요청이 거부되면 KMSThrottlingException 오류가 발생합니다. 이 문제를 해결하려면 AWS KMS에 대한 API 요청에서 ThrottlingExceptions 오류가 발생한 이유는 무엇입니까?를 참조하십시오.
- 스트림의 요청 비율이 너무 높거나 요청된 데이터가 사용 가능한 처리량에 비해 너무 커서 ProvisionedThroughputExceededException 오류가 발생합니다. 이 문제를 해결하려면 요청의 빈도나 크기를 줄이십시오.
**ProvisionedThroughputExceedException ** 오류가 발생하고 스트림이 프로비저닝된 용량 모드에 있는 경우 샤드 수가 충분하지 않은 것입니다. 더 많은 샤드를 프로비저닝하여 테이블 읽기 및 쓰기 작업을 관리하십시오.
ProvisionedThroughputExceededException 오류가 발생하고 스트림이 온디맨드 용량 모드에 있는 경우 잘못된 파티션 키를 사용하고 있을 수 있습니다. 잘못된 파티션 키로 인해 데이터가 여러 샤드에 고르지 않게 분산될 수 있습니다. 데이터가 고르지 않게 분산되면 레코드가 초당 2MB의 읽기 속도 할당량과 초당 최대 1MB의 쓰기 속도 할당량을 초과할 경우 일부 샤드에 과부하가 발생할 수 있습니다.
이 문제를 해결하려면 샤드 전체에 데이터를 균등하게 분배하는 파티션 키를 선택하십시오.
비용을 최적화하는 데 적합한 용량 모드 선택
DynamoDB를 사용하여 Kinesis 데이터 스트림의 성능과 비용을 최적화하려면 올바른 용량 모드를 선택하십시오.
DynamoDB 데이터베이스 워크로드가 크게 변동하고 예측하기 어려운 경우 온디맨드 용량 모드를 선택하십시오. Kinesis Data Streams은 샤드를 자동으로 관리하므로 용량을 계획할 필요가 없습니다.
워크로드가 보다 안정적이고 예측 가능하다면 프로비저닝된 용량 모드를 선택하십시오. DynamoDB 테이블의 변경 데이터 캡처 레코드를 수용하는 데 필요한 샤드 수를 지정할 수 있습니다.
CloudTrail 로그를 사용하여 API 활동 확인
컨트롤 플레인 API 활동으로 데이터 스트림 문제를 해결하려면 CloudTrail 로그를 검토하십시오. CloudTrail은 모든 컨트롤 플레인 작업을 기록하고 스트림이 켜지거나 꺼진 시점과 같은 스트림 활동 정보를 포함합니다. CloudTrail 로그에서 프로비저닝된 처리량 또는 Kinesis 및 DynamoDB 리소스와 관련된 문제를 분석합니다. 그런 다음 Kinesis Data Streams API를 사용하여 샤드를 관리합니다.
Kinesis Data Streams 지표를 사용하여 추가 문제 해결
Kinesis Data Streams 지표를 모니터링하려면 CloudWatch를 사용하십시오.
다음 지표는 일반적인 문제를 파악하는 데 도움이 됩니다.
- GetRecords.IteratorAgeMilliseconds 지표는 지정된 기간 동안 데이터 스트림에 대한 모든 GetRecords 직접 호출에서 수신한 가장 최근 레코드의 수명을 표시합니다.
- GetRecords.Latency 지표는 지정된 기간 동안 Kinesis 스트림에서 각 GetRecords 작업의 지속 시간을 표시합니다.
- ThrottledPutRecordCount 지표는 데이터 스트림의 용량이 부족하여 스로틀링된 레코드의 수를 표시합니다.
- WriteProvisionedThroughputExceeded 및 ReadProvisionedThroughputExceeded 지표는 지정된 기간 동안 데이터 스트림의 스로틀링으로 인해 거부된 레코드의 수를 표시합니다.
관련 정보
Amazon CloudWatch 및 AWS Lambda를 사용하여 Amazon Kinesis Data Streams 오토 스케일링
Kinesis Data Streams 소비자 문제 해결