Amazon Kinesis Data Streams
開発者ガイド

2 つのシャードを結合する

シャードの結合オペレーションは、指定した 2 つのシャードを取得し、1 つシャードに組み合わせます。結合後、1 つの子シャードは 2 つの親シャードのすべてのハッシュキー値のデータを受け取ります。

シャードの隣接

2 つのシャードを結合するには、シャードが隣接している必要があります。2 つのシャードのハッシュキー範囲が途切れておらず連続している場合、2 つのシャードは隣接していると考えられます。たとえば、2 つのシャードがあり、1 つのハッシュキー範囲が 276〜381、もう 1 つのハッシュキー範囲が 382〜454 であるとします。この 2 つのシャードは 1 つのシャードに結合可能であり、結合した場合のハッシュキー範囲は 276〜454 となります。

別の例として 2 つのシャードがあり、1 つのハッシュキー範囲が 276〜381、もう 1 つのハッシュキー範囲が 455〜560 であるとします。この 2 つのシャードは結合できません。これらの間に 1 つ以上のシャード (ハッシュキー範囲が 382〜454) が介在している可能性があります。

ストリーム内の OPEN 状態にあるすべてのシャードのセット (グループ) は、常に MD5 ハッシュキー値の全範囲にまたがります。シャードの状態 (CLOSED など) の詳細については、「リシャーディング後のデータのルーティング、データの永続化、シャードの状態」を参照してください。

結合候補になるシャードを特定するには、CLOSED 状態にあるすべてのシャードを除外する必要があります。OPEN 状態のシャード (CLOSED 状態でないシャード) の終了シーケンス番号は null です。以下のコードを使用してシャードの終了シーケンス番号をテストできます。

if( null == shard.getSequenceNumberRange().getEndingSequenceNumber() ) { // Shard is OPEN, so it is a possible candidate to be merged. }

CLOSED 状態のシャードを除外した後、各シャードでサポートされている最大ハッシュキー値で、残りのシャードを並べ替えます。以下のコード使用してこの値を取得できます。

shard.getHashKeyRange().getEndingHashKey();

このフィルタリングして並び替えたリストで 2 つシャードが隣接している場合、それらのシャードは結合できます。

結合オペレーションのコード

以下のコードでは、2 つシャードを結合しています。myStreamName には、ストリームの名前が格納され、オブジェクト変数 shard1shard2 には、結合する 2 つの隣接するシャードが格納されるとします。

結合オペレーションの場合、新しい mergeShardsRequest オブジェクトをインスタンス化することから始めます。setStreamName メソッドでストリーム名を指定します。次に、setShardToMergesetAdjacentShardToMerge のメソッドを使用して、結合する 2 つのシャードを指定します。最後に、Kinesis Data Streams クライアントで mergeShards メソッドを呼び出して、このオペレーションを実行します。

MergeShardsRequest mergeShardsRequest = new MergeShardsRequest(); mergeShardsRequest.setStreamName(myStreamName); mergeShardsRequest.setShardToMerge(shard1.getShardId()); mergeShardsRequest.setAdjacentShardToMerge(shard2.getShardId()); client.mergeShards(mergeShardsRequest);

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