翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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
には、ストリームの名前が格納され、オブジェクト変数 shard1
と shard2
には、結合する 2 つの隣接するシャードが格納されるとします。
結合オペレーションの場合、新しい mergeShardsRequest
オブジェクトをインスタンス化することから始めます。setStreamName
メソッドでストリーム名を指定します。次に、setShardToMerge
と setAdjacentShardToMerge
のメソッドを使用して、結合する 2 つのシャードを指定します。最後に、Kinesis Data Streams クライアントで mergeShards
メソッドを呼び出して、このオペレーションを実行します。
MergeShardsRequest mergeShardsRequest = new MergeShardsRequest(); mergeShardsRequest.setStreamName(myStreamName); mergeShardsRequest.setShardToMerge(shard1.getShardId()); mergeShardsRequest.setAdjacentShardToMerge(shard2.getShardId()); client.mergeShards(mergeShardsRequest);
この方法の後の最初の手順は、ストリームが再度アクティブになるまで待機するに示されています。