스트리밍할 올바른 모드 선택 - Amazon Kinesis Data Streams

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

스트리밍할 올바른 모드 선택

다음 주제에서는 애플리케이션에 최적의 모드를 선택하는 방법과 필요한 경우 모드 간 전환하는 방법을 설명합니다.

Kinesis Data Streams의 다양한 모드

모드는 데이터 스트림의 용량이 관리되는 방식과 데이터 스트림 사용에 대한 요금이 청구되는 방식을 결정합니다. Amazon Kinesis Data Streams에서 데이터 스트림용 모드로 온디맨드 표준, 온디맨드 어드밴티지, 프로비저닝된 중에서 선택할 수 있습니다.

  • 온디맨드 표준 - 온디맨드 모드의 데이터 스트림은 용량 계획이 필요 없으며 분당 수 기가바이트의 쓰기 및 읽기 처리량을 처리하도록 자동으로 확장됩니다. 온디맨드 모드에서 Kinesis Data Streams는 필요한 처리량을 제공하기 위해 샤드를 자동으로 관리합니다.

  • 온디맨드 어드밴티지 - 더 많은 온디맨드 스트림 기능을 지원하고 요금 구조가 더 단순한 계정 수준 모드입니다. 이 모드에서는 언제든지 스트림의 쓰기 처리량 용량을 사전에 워밍할 수 있습니다. 요금의 경우 스트림당 고정 요금이 더 이상 부과되지 않으며, 모든 온디맨드 스트림에서 데이터 수집, 데이터 검색, 연장 보존 사용량이 온디맨드 표준보다 60% 이상 낮습니다.

  • 프로비저닝된 - 프로비저닝된 모드의 데이터 스트림의 경우 데이터 스트림의 샤드 수를 지정해야 합니다. 데이터 스트림의 총 용량은 해당 샤드 용량의 합계입니다. 필요한 만큼 데이터 스트림의 샤드 수를 늘리거나 줄일 수 있습니다.

Kinesis Data Streams PutRecordPutRecords 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는 트래픽 증가를 감지하면 샤드를 균등하게 분할합니다. 하지만 수신 트래픽의 더 많은 부분을 특정 샤드로 유도하는 해시 키를 탐지하고 격리하지는 않습니다. 매우 고르지 않은 파티션 키를 사용하는 경우 쓰기 예외가 계속 발생할 수 있습니다. 이러한 사용 사례에서는 세분화된 샤드 분할을 지원하는 프로비저닝된 용량 모드를 사용하는 것이 좋습니다.

온디맨드 어드밴티지 모드의 기능 및 사용 사례

온디맨드 어드밴티지는 더 많은 기능을 제공하며 해당 리전의 모든 온디맨드 스트림에 대해 요금 구조가 다른 계정 수준 설정입니다. 이 모드에서 온디맨드 스트림은 기능을 유지하고 실제 데이터 사용량에 따라 용량을 자동으로 조정합니다. 스트림의 쓰기 처리량 용량을 사전에 워밍하려는 경우 웜 처리량을 구성할 수 있습니다. 예를 들어 데이터 스트림의 쓰기 처리량이 10MB/s~40MB/s인 경우 스로틀링 없이 최대 80MB/s의 즉각적인 처리량 증가를 처리할 수 있습니다. 그러나 예정된 이벤트가 최대 약 200MB/s의 트래픽에 도달할 것으로 예상되는 경우 데이터 처리량이 도착했을 때 용량을 사용할 수 있도록 스트림의 웜 처리량을 200MB/s로 구성할 수 있습니다. 웜 처리량을 사용해도 추가 요금이 발생하지 않습니다.

온디맨드 어드밴티지 모드의 또 다른 이점은 온디맨드 스트림이 더 단순한 요금 구조로 전환된다는 것입니다. 이 모드를 활성화하면 계정에 더 이상 고정된 스트림당 요금이 표시되지 않으며 데이터 수집, 데이터 검색, 선택 사항인 연장 보존 요금만 지불하면 됩니다. 또한 각 요금 차원은 온디맨드 표준의 해당 차원에 비해 상당한 수준의 할인이 적용됩니다. 자세한 내용은 Amazon Kinesis Data Streams 요금을 참조하세요.

향상된 팬아웃 데이터 검색 역시 이 모드의 표준 데이터 검색과 비교하여 가격 프리미엄이 없습니다. 또한 온디맨드 어드밴티지 모드를 사용하면 스트림당 최대 50명의 소비자를 등록하여 향상된 팬아웃을 사용할 수 있습니다. 온디맨드 어드밴티지를 활성화하면 계정이 모든 온디맨드 스트림에서 최소 25MiB/s의 데이터 수집 및 25MiB/s의 데이터 검색에 커밋됩니다. 최소 사용 요구 사항을 충족하는 계정의 경우 Kinesis Data Streams 콘솔에서 계정의 사용 패턴이 온디맨드 어드밴티지 모드를 사용하기에 적합한지 여부를 확인합니다.

계정의 데이터 사용량이 요구 사항보다 낮으면 차액이 부족액으로 청구되지만 동일한 할인율이 적용됩니다. 또한 온디맨드 어드밴티지를 활성화하면 최소 24시간 후에 이 모드를 비활성화할 수 있습니다. 전반적으로 온디맨드 어드밴티지는 일관된 처리량이 최소 약정 수준에 근접하거나 이를 초과하는 경우, 많은 팬아웃 소비자가 필요한 경우 또는 수백 개의 데이터 스트림을 작동하는 경우에 Kinesis Data Streams를 사용하여 스트리밍하기에 가장 좋은 방법입니다.

프로비저닝된 모드 기능 및 사용 사례

프로비저닝된 모드를 사용하면 데이터 스트림을 생성한 후 AWS Management 콘솔 또는 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_KBrecords_per_second를 곱한 값과 같습니다.

  • KB 단위의 발신 읽기 대역폭(outgoing_read_bandwidth_in_KB)은 incoming_write_bandwidth_in_KBnumber_of_consumers를 곱한 값과 같습니다.

다음 형식의 입력 값을 사용하여 스트림에 필요한 샤드 수(number_of_shards)를 계산할 수 있습니다.

number_of_shards = ceiling(max(incoming_write_bandwidth_in_KiB/1024, outgoing_read_bandwidth_in_KiB/2048))

최대 처리량을 처리하도록 데이터 스트림을 구성하지 않으면 프로비저닝된 모드에서 읽기 및 쓰기 처리량 예외가 계속 발생할 수 있습니다. 이 경우 데이터 트래픽을 수용할 수 있도록 데이터 스트림 규모를 수동으로 조정해야 합니다.

또한 파티션 키를 사용하여 데이터가 고르지 않게 배포되고 샤드에 할당된 레코드가 제한을 초과하는 경우 읽기 및 쓰기 예외가 발생할 수 있습니다. 프로비저닝된 모드에서 이 문제를 해결하려면 해당 샤드를 식별하고 트래픽을 더 잘 수용할 수 있도록 수동으로 분할합니다. 자세한 내용은 스트림 리샤딩을 참조하세요.

모드 간 전환

의 각 데이터 스트림에 대해 24시간 이내에 온디맨드 모드와 프로비저닝된 모드 간에 두 번 전환할 AWS 계정수 있습니다. 모드를 전환해도 이 데이터 스트림을 사용하는 애플리케이션은 중단되지 않습니다. 이 데이터 스트림에서 계속 쓰고 읽을 수 있습니다. 온디맨드 모드와 프로비저닝된 모드 사이에서 전환할 때 스트림 상태는 업데이트 중으로 설정됩니다. 속성을 다시 수정하려면 데이터 스트림이 활성 상태가 될 때까지 기다려야 합니다.

프로비저닝된 용량 모드에서 온디맨드 용량 모드로 전환하면 처음에는 데이터 스트림이 전환 전의 샤드 수를 유지하며, 이 시점부터 Kinesis Data Streams는 데이터 트래픽을 모니터링하고 쓰기 처리량에 따라 이 온디맨드 데이터 스트림의 샤드 수를 조정합니다. 온디맨드 모드에서 프로비저닝된 모드로 전환하면 처음에는 데이터 스트림에 전환 전의 샤드 수가 그대로 유지되지만, 이 때부터는 쓰기 처리량을 적절하게 수용할 수 있도록 이 데이터 스트림의 샤드 수를 모니터링하고 조정해야 합니다.

계정 수준 설정을 활성화하여 온디맨드 표준 모드에서 온디맨드 어드밴티지 모드로 전환할 수 있습니다. 활성화하면 계정이 해당 리전의 모든 온디맨드 스트림에서 최소 25MiB/s의 데이터 수집 및 25MiB/s의 데이터 검색 사용량에 커밋됩니다. 활성화 후에는 온디맨드 어드밴티지를 비활성화하기까지 최소 24시간을 기다려야 하지만 언제든지 변경을 요청할 수 있습니다. 온디맨드 어드밴티지에서 온디맨드 표준으로 전환하려면 먼저 온디맨드 스트림으로 구성된 웜 처리량을 제거해야 합니다.