シャードの分割 - Amazon Kinesis Data Streams

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

シャードの分割

Amazon Kinesis Data Streams でシャードを分割するには、親シャードのハッシュキー値を子シャードに再配分する方法を指定する必要があります。データレコードをストリームに追加すると、レコードはハッシュキー値に基づいてシャードに割り当てられます。ハッシュキー値は、ストリームに追加するデータレコードに指定するパーティションキーの MD5 ハッシュです。パーティションキーが同じデータレコードはハッシュキー値も同じです。

指定したシャードに使用可能なハッシュキー値は、順序付けられた連続する正の整数で構成されます。ハッシュキーの一連の値は以下の式を使用して導き出します。

shard.getHashKeyRange().getStartingHashKey(); shard.getHashKeyRange().getEndingHashKey();

シャードを分割するときは、この一連の値を指定します。そのハッシュキー値とそれより上位のすべてのハッシュキー値は、いずれかの子シャードの配分されます。それより下位のすべてのハッシュキー値は、その他の子のシャードに配分されます。

以下のコードでは、子シャード間でハッシュキーを均等に再配分し、親シャードを半分に分割する基本的なシャード分割オペレーションを示します。これは、親シャードを分割する方法の 1 つに過ぎません。たとえば、親シャードの下位 1/3 のキーを 1 つの子シャードに配分し、上位 2/3 のキーをその他の子シャードに配分して、シャードを分割することもできます。ただし、多くアプリケーションに効果的なのは、シャードを半分に分割することです。

以下のコードでは、myStreamName にストリームの名前が格納され、オブジェクト変数 shard に分割するシャードが格納されるとします。新しい splitShardRequest オブジェクトをインスタンス化し、ストリーム名とシャード ID を設定することから始めます。

SplitShardRequest splitShardRequest = new SplitShardRequest(); splitShardRequest.setStreamName(myStreamName); splitShardRequest.setShardToSplit(shard.getShardId());

シャード内の最小値と最大値の中間にあるハッシュキー値を決定します。これは、子シャードの開始ハッシュキー値になり、親シャードのハッシュキーの上位半分が含まれます。この値を setNewStartingHashKey メソッドで指定します。この値だけを指定する必要があります。Kinesis Data Streams は、この値より下位のハッシュキーを、分割によって作成されたその他の子シャードに、自動的に配分します。最後のステップとして、splitShardメソッドKinesis Data Streams。

BigInteger startingHashKey = new BigInteger(shard.getHashKeyRange().getStartingHashKey()); BigInteger endingHashKey = new BigInteger(shard.getHashKeyRange().getEndingHashKey()); String newStartingHashKey = startingHashKey.add(endingHashKey).divide(new BigInteger("2")).toString(); splitShardRequest.setNewStartingHashKey(newStartingHashKey); client.splitShard(splitShardRequest);

この方法の後の最初の手順は、「ストリームが再度アクティブになるまで待機する」に示されています。