Amazon Kinesis Data Streams
開発者ガイド

リシャーディング、拡張、並列処理

リシャーディングによって、ストリームのデータフロー率の変化に合わせて、ストリーム内のシャード数を増減できます。リシャーディングは、通常、シャードのデータ処理メトリクスを監視する管理アプリケーションによって実行されます。KCL 自体はリシャーディングオペレーションを開始しませんが、リシャーディングに起因するシャードの数の変化に適応するように設計されています。

Amazon Kinesis Data Streams Application の状態の追跡」で説明したように、KCL は Amazon DynamoDB テーブルを使用してストリーム内のシャードを追跡します。リシャーディングの結果として新しいシャードが作成されるときに、KCL は新しいシャードを検出し、テーブル内の新しい行に値を入力します。ワーカーは、自動的に新しいシャードを検出し、シャードからのデータを処理するためにプロセッサを作成します。また、KCL は、ストリーム内のシャードを、利用可能なすべてのワーカーとレコードプロセッサに分散させます。

KCL は、リシャーディング前にシャードに存在していたすべてのデータが最初に処理されるようにします。このデータが処理された後、新しいシャードからのデータがレコードプロセッサに送信されます。このようにして、KCL は、データレコードが特定のパーティションキーのストリームに追加された順序を保持します。

例: リシャーディング、拡張、並列処理

次の例は、KCL を使用してスケーリングとリシャーディングを処理する方法を示しています。

  • アプリケーションが 1 つの EC2 インスタンスで実行中であり、4 つのシャードを含む 1 つの Kinesis data stream を処理しているとします。この 1 つのインスタンスに 1 つの KCL ワーカーと、4 つのレコードプロセッサ (各シャードに 1 つのレコードプロセッサ) があります。この 4 つのレコードプロセッサは、同一プロセス内で並列実行されます。

  • 次に、別のインスタンスを使用するようにアプリケーションを拡張し、2 つのインスタンスで、4 つのシャードを含む 1 つのストリームを処理するとします。KCL ワーカーが 2 番目のインスタンスで起動すると、最初のインスタンスとの間で負荷分散が行われ、各インスタンスで 2 つのシャードが処理されるようになります。

  • 次に、4 つのシャードを 5 つのシャードに分割するとします。KCL は再度インスタンスでの処理を調整します。一方のインスタンスが 3 つのシャードを処理し、もう一方のインスタンスが 2 つのシャードを処理するように調整されます。シャードをマージしたときにも、同様の調整が行われます。

通常、KCL を使用する場合、インスタンスの数がシャードの数を超過しないように注意します (障害に対するスタンバイを目的とする場合を除く)。各シャードは厳密に 1 つの KCL ワーカーによって処理され、対応するレコードプロセッサが厳密に 1 つ存在するため、1 つのシャードを処理するために複数のインスタンスが必要になることはありません。ただし、1 つのワーカーで任意の数のシャードを処理できるため、シャードの数がインスタンスの数を超過していても問題はありません。

アプリケーションでの処理を拡張するには、次のようなアプローチの組み合わせをテストする必要があります。

  • インスタンスのサイズを拡張する (すべてのレコードプロセッサがプロセス内で並列実行されるため)

  • 開くことができるシャードの最大数までインスタンスの数を増やす (シャードを個別に処理できるため)

  • シャードの数を増やす (並列処理のレベルが向上する)

Auto Scaling を使用すると、適切なメトリクスに基づいて自動的にインスタンスを拡張できます。詳細については、Amazon EC2 Auto Scaling ユーザーガイド を参照してください。

リシャーディングによってストリーム内のシャードの数が増加すると、対応するレコードプロセッサの数も増加し、これらをホストする EC2 インスタンスの負荷が増大します。このインスタンスが Auto Scaling グループの一部であり、負荷の増加が十分である場合、増加した負荷を処理するために Auto Scaling グループにインスタンスが追加されます。新しいインスタンスで追加のワーカーやレコードプロセッサがすぐにアクティブになるように、インスタンスの起動時に Amazon Kinesis Data Streams applicationを起動するように設定してください。

リシャーディングの詳細については、「ストリームをリシャーディングする」を参照してください。