翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
リシャーディングアクションを完了する
Amazon Kinesis Data Streams でリシャーディングの手順が終了し、通常のレコード処理を再開する前に必要な手順や検討事項があります。以下のセクションでは、これらについて説明します。
ストリームが再度アクティブになるまで待機する
リシャーディングオペレーションとして splitShard
または mergeShards
のいずれかを呼び出した後、ストリームが再びアクティブになるまで待機する必要があります。使用するコードは、ストリームの作成後にストリームがアクティブになるまで待機する場合のものと同じです。コードは次のとおりです。
DescribeStreamRequest describeStreamRequest = new DescribeStreamRequest(); describeStreamRequest.setStreamName( myStreamName ); long startTime = System.currentTimeMillis(); long endTime = startTime + ( 10 * 60 * 1000 ); while ( System.currentTimeMillis() < endTime ) { try { Thread.sleep(20 * 1000); } catch ( Exception e ) {} try { DescribeStreamResult describeStreamResponse = client.describeStream( describeStreamRequest ); String streamStatus = describeStreamResponse.getStreamDescription().getStreamStatus(); if ( streamStatus.equals( "ACTIVE" ) ) { break; } // // sleep for one second // try { Thread.sleep( 1000 ); } catch ( Exception e ) {} } catch ( ResourceNotFoundException e ) {} } if ( System.currentTimeMillis() >= endTime ) { throw new RuntimeException( "Stream " + myStreamName + " never went active" ); }
リシャーディング後のデータのルーティング、データの永続化、シャードの状態を考慮する
Kinesis Data Streams は、リアルタイムのデータストリーミングサービスです。アプリケーションは、データがストリーム内のシャードを継続的に流れることを前提とする必要があります。リシャーディングすると、親シャードに流れていたデータレコードは、データレコードのパーティションキーがマッピングされるハッシュキー値に基づいて、子シャードに流れるように再ルーティングされます。ただし、リシャーディング前に親シャードにあったデータレコードはすべて、それらのシャードに残ります。リシャーディング後に親シャードが失われることはありません。それらのシャードはリシャーディング前に格納されていたデータと共に保持されます。親シャードのデータレコードには、Kinesis Data Streams の getShardIteratorおよび getRecords オペレーションAPI、または Kinesis Client Library を使用してアクセスできます。
注記
データレコードは、現在の保持期間にストリームを追加した時間からアクセスできます。これは、その期間内のストリームのシャードの変更に関係なく当てはまります。ストリームの保持期間の詳細については、データ保持期間を変更するを参照してください。
リシャーディングの過程で、親シャードは OPEN
状態から CLOSED
状態に、さらに EXPIRED
状態へと移行します。
-
OPEN: リシャードオペレーションの前に、親シャードは
OPEN
状態になります。つまり、データレコードをシャードに追加し、シャードから取得できます。 -
CLOSED: リシャードオペレーションの後、親シャードは
CLOSED
状態に移行します。つまり、データレコードはシャードに追加されなくなります。このシャードに追加されることになっていたデータレコードは、子シャードに追加されるようになります。ただし、データレコードは引き続き、制限された時間内にシャードから取得できます。 -
EXPIRED: ストリームの保持期間が終了すると、親シャード内のすべてのデータレコードの有効期限が切れ、アクセスできなくなります。この時点で、シャード自体は
EXPIRED
状態に移行します。getStreamDescription().getShards
を呼び出してストリーム内のシャードを列挙しても、返されるシャードのリストには 状態のシャードは含まれません。EXPIRED
ストリームの保持期間の詳細については、データ保持期間を変更するを参照してください。
リシャーディング後、ストリームが再び ACTIVE
状態になるとすぐに、子シャードからのデータの読み取りを開始できます。ただし、リシャーディング後に残った親シャードには、リシャーディング前にストリームに追加されてまだ読み取られていないデータがそのまま格納されている可能性があります。親シャードからすべてのデータを読み取る前に、子シャードからデータを読み取った場合は、特定のハッシュキーが原因で、読み取ったデータがデータレコードのシーケンス番号に基づいた順序に並ばない可能性があります。したがって、データの順序が重要である場合は、リシャーディング後そのデータを使い切るまで、親シャードからのデータの読み取りを続行する必要があります。子シャードからのデータの読み取りは必ずその後で開始してください。getRecordsResult.getNextShardIterator
が を返した場合は、親シャード内のすべてのデータを読み取ったということです。null