Kinesis Data Streams で開いているシャード数を変更する方法を教えてください。

最終更新日: 2020 年 6 月 5 日

Amazon Kinesis Data Streams の開いているシャード数を変更しようと試みています。それを行う方法とシャード数の変更後に行う操作を教えてください。

簡単な説明

シャードは、OPEN、CLOSED、または EXPIRED 状態であることができます。シャードが OPEN 状態の場合、シャードからデータレコードを追加および取得できます。

Kinesis Data Streams で開いているシャード数を変更するには、次のいずれかを実行します。

  1. 合計シャード数を更新します。これにより、ストリーム内のシャード数が変更されます。
  2. 1 つのシャードを分割します。
  3. 2 つのシャードを 1 つのシャードにマージします。

注意: Amazon Kinesis データストリームの開いているシャード数を変更する場合は、親シャードとハッシュキー範囲の値への影響を考慮してください。

解決方法

合計シャード数の更新

Kinesis コンソールまたは API オペレーションを使用して、開いているシャード数を更新できます。AWS マネジメントコンソールを使用する場合、Data Streams は UpdateShardCount API を使用してストリームをリシャードします。

  • この API オペレーションは、指定されたストリームのシャード数を指定されたシャード数に更新します (バックグラウンドで個々のシャードを分割またはマージすることによって)。これは、ストリームレベルの API 呼び出しです。
  • これは、ハッシュキー範囲に対して同じ割合のシャードを作成する均一なスケーリングのみをサポートします。
  • UpdateShardCount オペレーションは、シャードの数を、同じサイズの特定のターゲット値に再調整します。

1 つのシャードを分割する

「ホット」シャードまたは「コールド」シャードが発生した場合は、シャードを 2 つのシャードに分割することを検討してください。

注意: API オペレーションを通してのみ、シャードを分割またはマージできます。

予想よりも多くのデータを受け取るシャードは、「ホット」シャードと呼ばれます。次に、SplitShard API を使用してホットシャードを選択的に分割し、このようなシャードを対象とするハッシュキーの容量を増やすことができます。ホットシャードの管理の詳細については、「リシャーディングのための戦略」を参照してください。

Amazon CloudWatch で Amazon Kinesis Data Streams サービスをモニタリングすることもできます。CloudWatch メトリクスを使用して、 IncomingRecordsIncomingBytes などのシャードレベルのメトリクスを有効にして、「ホット」シャードなのか「コールド」シャードなのかを判断します。

2 つのシャードを 1 つのシャードにマージする

「ホット」シャードまたは「コールド」シャードが発生した場合は、2 つのシャードを 1 つにマージすることを検討してください。

注意: API オペレーションを通してのみ、シャードを分割またはマージできます。

予想よりもかなり少ないデータを受け取るシャードは、「コールド」シャードと呼ばれます。その後、MergeShards API を使用して容量を最大限利用することで、コールドシャードをマージできます。これはシャードレベルの API 呼び出しです。2 つの隣接するシャードのみをマージできます。この場合、ハッシュキー範囲の和がギャップなしで連続したセットを形成します。

Amazon CloudWatch で Amazon Kinesis Data Streams サービスをモニタリングすることもできます。CloudWatch メトリクスを使用して、 IncomingRecordsIncomingBytes などのシャードレベルのメトリクスを有効にして、「ホット」シャードなのか「コールド」シャードなのかを判断します。

その他の考慮事項

リシャーディング操作が実行されるシャードまたはシャードのペアは、親シャードと呼ばれます。リシャーディング操作の後に作成されたシャードは、子シャードと呼ばれます。また、親シャードは OPEN 状態から CLOSED 状態に移行します (最終的には、ストリームの保持期間後に EXPIRED 状態に移行します)。これにより、子シャードに OPEN 状態が割り当てられる場合があります。親シャードの移行の詳細については、「データルーティング、データ永続性、リシャード後のシャードの状態」を参照してください。

リシャーディング後、CLOSED シャードからデータがなくなるまで引き続き読み取る必要があります。これは、コンシューマーアプリケーションで読み取ったデータの順序を維持するのに役立ちます。CLOSED 状態のシャードをすべて読み取ったら、開いている子シャードからのデータの読み取りを開始できます。Amazon Kinesis クライアントライブラリ (KCL) は、リシャーディング操作に適応するように設計されています。リシャーディング前にシャードに存在していたデータは、最初に処理されます。リシャーディング操作の詳細については、「リシャーディング、スケーリング、並列処理」を参照してください。

開いているシャードの数を変更すると、一部の (またはすべての) シャードのハッシュキー範囲も変更される可能性があります。ハッシュキー範囲は、シャードに対して取ることができるハッシュキー値の範囲で、順序付けられた連続する正の整数のセットです。範囲は、開始キー値と終了キー値で構成されます。たとえば、5 つのオープンシャードを持つ Kinesis データストリームを作成する場合、ハッシュキー範囲は 20% で等しく分割されます。したがって、どのシャードもハッシュキースペース値として 20% あります。

Kinesis データストリームでリシャーディング操作を実行する場合、ハッシュキー範囲は次のように子シャードに分割されます。

  • コンソールまたは UpdateShardCount API を使用する: 開いているシャードの数を 5 から 10 に変更すると、子シャードのハッシュキースペースは 10% になります。ハッシュキーの範囲は、10% の値で、開いているすべてのシャードに等しく分割されます。
  • SplitShard API を使用する: 最後のシャード (Shard-5) を 2 つのシャード (Shard-6 と Shard-7) に分割します。シャードを分割する前に、親シャード (Shard-5) のハッシュキースペースは 20% でした。分割後、子シャード (Shard-6 と Shard-7) のハッシュキースペースは 10% になります。親シャードのハッシュキー範囲は、それぞれが 10% の値を持つ子シャードに等しく分割されます。したがって、ハッシュキースペースは 20%-20%-20%-20%-10%-10% に分割されます。 
  • MergeShards API を使用する: 最後の 2 つのシャード (Shard- 4 と Shard- 5) を 1 つのシャード (Shard-6) にマージします。親シャード (Shard-4 と Shard-5) のハッシュキースペースは 20% です。マージ後、子シャード (Shard-6) のハッシュキースペースは 40% になります。親シャードのハッシュキー範囲が両方の子シャードに追加され、40% になります。したがって、ハッシュキースペースは 20%-20%-20%-40% に分割されます。

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合