기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
데이터 스트림 용량 모드 선택
다음 주제에서는 애플리케이션에 적합한 용량 모드를 선택하는 방법과 필요한 경우 용량 모드 간을 전환하는 방법을 설명합니다.
데이터 스트림 용량 모드란?
용량 모드는 데이터 스트림의 용량이 관리되는 방식과 데이터 스트림 사용에 대한 요금이 청구되는 방식을 결정합니다. Amazon Kinesis Data Streams에서 데이터 스트림에 대해 온디맨드 모드와 프로비저닝된 모드 중에서 선택할 수 있습니다.
-
온디맨드 - 온디맨드 모드의 데이터 스트림은 용량 계획이 필요 없으며 분당 수 기가바이트의 쓰기 및 읽기 처리량을 처리하도록 자동으로 확장됩니다. 온디맨드 모드에서 Kinesis Data Streams는 필요한 처리량을 제공하기 위해 샤드를 자동으로 관리합니다.
-
프로비저닝된 - 프로비저닝된 모드의 데이터 스트림의 경우 데이터 스트림의 샤드 수를 지정해야 합니다. 데이터 스트림의 총 용량은 해당 샤드 용량의 합계입니다. 필요한 만큼 데이터 스트림의 샤드 수를 늘리거나 줄일 수 있습니다.
Kinesis Data Streams PutRecord
및 PutRecords
API를 사용하여 온디맨드 및 프로비저닝된 용량 모드 모두에서 데이터 스트림에 데이터를 쓸 수 있습니다. 데이터를 검색하기 위해 두 용량 모드 모두 GetRecords
API를 사용하는 기본 소비자와 SubscribeToShard
API를 사용하는 향상된 팬아웃(EFO) 소비자를 지원합니다.
보존 모드, 암호화, 모니터링 지표 등을 포함한 모든 Kinesis Data Streams 기능은 온디맨드 모드와 프로비저닝된 모드 모두에 대해 지원됩니다. Kinesis Data Streams는 온디맨드 및 프로비저닝된 용량 모드 모두에서 높은 내구성과 가용성을 제공합니다.
온디맨드 모드 기능 및 사용 사례
온디맨드 모드의 데이터 스트림은 용량 계획이 필요 없으며 분당 수 기가바이트의 쓰기 및 읽기 처리량을 처리하도록 자동으로 확장됩니다. 온디맨드 모드를 사용하면 서버, 스토리지 또는 처리량을 프로비저닝하고 관리할 필요가 없으므로 짧은 지연 시간으로 대용량 데이터를 간편하게 수집하고 저장할 수 있습니다. 운영 오버헤드 없이 하루에 수십억 개의 레코드를 수집할 수 있습니다.
온디맨드 모드는 매우 가변적이고 예측할 수 없는 애플리케이션 트래픽의 요구 사항을 해결하는 데 이상적입니다. 더 이상 최대 용량을 위해 이러한 워크로드를 프로비저닝하지 않아도 되므로 사용률이 낮아 비용이 증가할 수 있습니다. 온디맨드 모드는 예측할 수 없고 매우 가변적인 트래픽 패턴을 가진 워크로드에 적합합니다.
온디맨드 용량 모드를 사용하면 데이터 스트림에서 쓰고 읽은 데이터에 대해 GB당 요금을 지불합니다. 애플리케이션에서 수행할 것으로 예상되는 읽기 및 쓰기 처리량을 지정할 필요가 없습니다. Kinesis Data Streams는 워크로드가 증가하거나 감소할 때 즉시 워크로드를 수용합니다. 자세한 내용은 Amazon Kinesis Data Streams 요금
온디맨드 모드의 데이터 스트림은 지난 30일 동안 관찰된 최대 쓰기 처리량의 최대 2배를 수용합니다. 데이터 스트림의 쓰기 처리량이 최고치에 도달하면 Kinesis Data Streams는 데이터 스트림의 용량을 자동으로 조정합니다. 예를 들어, 데이터 스트림의 쓰기 처리량이 10MB/s에서 40MB/s 사이인 경우 Kinesis Data Streams를 사용하면 최대 피크 처리량의 2배인 80MB/s까지 쉽게 버스트할 수 있습니다. 동일한 데이터 스트림이 새로운 최대 처리량인 50MB/s를 유지하는 경우 Kinesis Data Streams는 100MB/s의 쓰기 처리량을 수집하기에 충분한 용량을 확보합니다. 하지만 15분 내에 트래픽이 이전 최고치의 2배 이상으로 증가하면 쓰기 제한이 발생할 수 있습니다. 제한된 이러한 요청을 다시 시도해야 합니다.
온디맨드 모드를 사용하는 데이터 스트림의 총 읽기 용량은 쓰기 처리량에 비례하여 증가합니다. 이를 통해 소비자 애플리케이션은 수신 데이터를 실시간으로 처리하는 데 필요한 적절한 읽기 처리량을 항상 확보할 수 있습니다. GetRecords
API를 사용한 데이터 읽기에 비해 쓰기 처리량이 2배 이상 높습니다. GetRecord
API와 함께 하나의 소비자 애플리케이션을 사용하여 애플리케이션이 다운타임에서 복구해야 할 때 이를 따라잡을 수 있는 충분한 공간을 확보하는 것이 좋습니다. 2개 이상의 소비자 애플리케이션을 추가해야 하는 시나리오에는 Kinesis Data Streams의 향상된 팬아웃 기능을 사용하는 것이 좋습니다. 향상된 팬아웃은 SubscribeToShard
API 사용하여 데이터 스트림에 최대 20개의 소비자 애플리케이션을 추가할 수 있도록 지원하며, 각 소비자 애플리케이션에는 전용 처리량이 있습니다.
읽기 및 쓰기 처리량 예외 처리
프로비저닝된 용량 모드와 마찬가지로 온디맨드 용량 모드에서는 데이터 스트림에 데이터를 쓰려면 각 레코드에 파티션 키를 지정해야 합니다. Kinesis Data Streams는 파티션 키를 사용하여 샤드 전체에 데이터를 배포합니다. Kinesis Data Streams는 각 샤드의 트래픽을 모니터링합니다. 수신 트래픽이 샤드당 500KB/s를 초과하면 15분 내에 샤드를 분할합니다. 상위 샤드의 해시 키 값은 하위 샤드에 균등하게 재배포됩니다.
수신 트래픽이 이전 최고치의 2배를 초과하는 경우 데이터가 샤드에 균등하게 배포되어 있더라도 약 15분 동안 읽기 또는 쓰기 예외가 발생할 수 있습니다. 모든 레코드가 Kinesis Data Streams에 제대로 저장되도록 이러한 요청을 모두 재시도하는 것이 좋습니다.
파티션 키를 사용하여 데이터가 고르지 않게 배포되고 특정 샤드에 할당된 레코드가 제한을 초과하는 경우 읽기 및 쓰기 예외가 발생할 수 있습니다. 온디맨드 모드에서는 파티션 키 하나가 샤드의 1MB/s 처리량과 초당 레코드 1,000개 제한을 초과하지 않는 한 데이터 스트림이 고르지 않은 데이터 배포 패턴을 처리하도록 자동으로 조정됩니다.
온디맨드 모드에서 Kinesis Data Streams는 트래픽 증가를 감지하면 샤드를 균등하게 분할합니다. 하지만 수신 트래픽의 더 많은 부분을 특정 샤드로 유도하는 해시 키를 탐지하고 격리하지는 않습니다. 매우 고르지 않은 파티션 키를 사용하는 경우 쓰기 예외가 계속 발생할 수 있습니다. 이러한 사용 사례에서는 세분화된 샤드 분할을 지원하는 프로비저닝된 용량 모드를 사용하는 것이 좋습니다.
프로비저닝된 모드 기능 및 사용 사례
프로비저닝된 모드를 사용하면 데이터 스트림을 생성한 후 AWS Management Console 또는 UpdateShardCount API를 사용하여 샤드 용량을 동적으로 확장하거나 축소할 수 있습니다. Kinesis Data Streams 생산자 또는 소비자 애플리케이션이 스트림에 데이터를 쓰거나 스트림에서 데이터를 읽는 동안 업데이트할 수 있습니다.
프로비저닝된 모드는 용량 요구 사항을 예측하기 쉬운 예측 가능한 트래픽에 적합합니다. 샤드에 데이터가 배포되는 방식을 세밀하게 제어하려는 경우 프로비저닝된 모드를 사용할 수 있습니다.
프로비저닝된 모드에서는 데이터 스트림의 샤드 수를 지정해야 합니다. 프로비저닝된 모드 사용 시 데이터 스트림의 크기를 결정하려면 다음 입력 값이 필요합니다.
-
스트림에 쓰여지는 평균 데이터 레코드 크기(KB 단위), 가장 가까운 1KB로 반올림됨(
average_data_size_in_KB
) -
스트림에서 초당 쓰고 읽는 데이터 레코드 수(
records_per_second
) -
스트림과 동시에 독립적으로 데이터를 소비하는 Kinesis Data Streams 애플리케이션인 소비자 수(
number_of_consumers
) -
KB 단위의 수신 쓰기 대역폭(
incoming_write_bandwidth_in_KB
)은average_data_size_in_KB
에records_per_second
를 곱한 값과 같습니다. -
KB 단위의 발신 읽기 대역폭(
outgoing_read_bandwidth_in_KB
)은incoming_write_bandwidth_in_KB
에number_of_consumers
를 곱한 값과 같습니다.
다음 형식의 입력 값을 사용하여 스트림에 필요한 샤드 수(number_of_shards
)를 계산할 수 있습니다.
number_of_shards = max(incoming_write_bandwidth_in_KiB/1024, outgoing_read_bandwidth_in_KiB/2048)
최대 처리량을 처리하도록 데이터 스트림을 구성하지 않으면 프로비저닝된 모드에서 읽기 및 쓰기 처리량 예외가 계속 발생할 수 있습니다. 이 경우 데이터 트래픽을 수용할 수 있도록 데이터 스트림 규모를 수동으로 조정해야 합니다.
또한 파티션 키를 사용하여 데이터가 고르지 않게 배포되고 샤드에 할당된 레코드가 제한을 초과하는 경우 읽기 및 쓰기 예외가 발생할 수 있습니다. 프로비저닝된 모드에서 이 문제를 해결하려면 해당 샤드를 식별하고 트래픽을 더 잘 수용할 수 있도록 수동으로 분할합니다. 자세한 내용은 스트림 리샤딩을 참조하세요.
용량 모드 간 전환
온디맨드 용량 모드와 프로비저닝된 용량 모드 사이를 전환할 수 있습니다. AWS 계정의 각 데이터 스트림에 대해 24시간 내에 두 번 온디맨드 용량 모드와 프로비저닝된 용량 모드 사이를 전환할 수 있습니다.
데이터 스트림의 용량 모드를 전환해도 이 데이터 스트림을 사용하는 애플리케이션이 중단되지는 않습니다. 이 데이터 스트림에서 계속 쓰고 읽을 수 있습니다. 온디맨드 용량 모드와 프로비저닝된 용량 모드 사이를 전환할 때 스트림 상태는 업데이트 중으로 설정됩니다. 속성을 다시 수정하려면 데이터 스트림이 활성 상태가 될 때까지 기다려야 합니다.
프로비저닝된 용량 모드에서 온디맨드 용량 모드로 전환하면 처음에는 데이터 스트림이 전환 전의 샤드 수를 유지하며, 이 시점부터 Kinesis Data Streams는 데이터 트래픽을 모니터링하고 쓰기 처리량에 따라 이 온디맨드 데이터 스트림의 샤드 수를 조정합니다.
온디맨드 모드에서 프로비저닝된 모드로 전환하면 처음에는 데이터 스트림에 전환 전의 샤드 수가 그대로 유지되지만, 이 때부터는 쓰기 처리량을 적절하게 수용할 수 있도록 이 데이터 스트림의 샤드 수를 모니터링하고 조정해야 합니다.