メニュー
Amazon Kinesis Data Streams
開発者ガイド

リシャーディングのための戦略

リシャーディングの目的は、ストリームをデータの流量の変化に適応させることです。シャードを分割すると、ストリームの容量(およびコスト)が増えます。シャードを結合すると、ストリームのコスト(および容量)が減ります。

リシャーディングへの 1 つのアプローチとして考えられるのは、単にストリーム内のすべてのシャードを分割することです。これにより、ストリームの容量は倍増します。ただし、実際に必要になるよりも多くの容量が追加されるため、不要なコストが生じる可能性があります。

メトリックを使用して、シャードが「ホット」であるか「コールド」であるか、つまり、想定より過多なデータを受け取っているか、過少なデータを受け取っているかを判断できます。ホットシャードは分割して、それらのハッシュキーに対応した容量を増やすことができます。同様に、コールドシャードは結合して、未使用の容量をより有効に活用できます。

Kinesis Data Streams が発行する CloudWatch メトリクスから、ストリームについてパフォーマンスデータを取得できます。ただし、ストリームについて独自のメトリックを収集することもできます。1 つのアプローチとして考えられるのは、データレコードのパーティションキーによって生成されたハッシュキー値をログに記録することです。ストリームにレコードを追加するときにパーティションキーを指定していることを思い出してください。

putRecordRequest.setPartitionKey( String.format( "myPartitionKey" ) );

Kinesis Data Streams では、MD5 を使用してパーティションキーからハッシュキーを計算します。レコードのパーティションキーを指定しているため、MD5 を使用してそのレコードのハッシュキー値を計算し、ログに記録できます。

また、データレコードが割り当てられているシャードの ID をログに記録することもできます。シャード ID は、putRecords メソッドによって返される putRecordResults オブジェクトおよび putRecord メソッドによって返される putRecordResult オブジェクトの getShardId メソッドを使用することによって利用できます。

String shardId = putRecordResult.getShardId();

シャード ID とハッシュキー値を使用すると、最も多いまたは少ないトラフィックを受け取っているシャードとハッシュキーを特定できます。その後、リシャーディングによりこれらのハッシュキーに対応した容量を増やすか減らすことができます。