Amazon Kinesis Data Streams
開発者ガイド

Amazon Kinesis Data Streams の障害からの復旧

Amazon Kinesis Data Streams applicationを使用してストリームからのデータを処理するときに、次のレベルで障害が発生する可能性があります。

  • レコードプロセッサで障害が発生する

  • ワーカーで障害が発生するか、そのワーカーをインスタンス化したこのアプリケーションのインスタンスで障害が発生する

  • アプリケーションの 1 つ以上のインスタンスをホストしている EC2 インスタンスで障害が発生する

レコードプロセッサの障害

ワーカーは、Java の ExecutorService タスクを使用してレコードプロセッサメソッドを呼び出します。タスクが失敗した場合でも、ワーカーはレコードプロセッサが処理中であったシャードの制御を保持しています。ワーカーは、このシャードを処理するために新しいレコードプロセッサタスクを開始します。詳細については、「読み込みのスロットリング」を参照してください。

ワーカーまたはアプリケーションの障害

ワーカー (または ​Amazon Kinesis Data Streams application のインスタンス) に障害が発生した場合、状況を検出して処理する必要があります。たとえば、Worker.run メソッドが例外をスローする場合、この例外をキャッチして処理する必要があります。

アプリケーション自体に障害が発生した場合は、これを検出し、再起動する必要があります。アプリケーションは、起動するときに新しいワーカーをインスタンス化します。このワーカーが新しいレコードプロセッサをインスタンス化すると、処理するシャードが自動的に割り当てられます。これらは、障害が発生する前に、これらのレコード プロセッサが処理していたものと同じシャードにすることも、これらのプロセッサで新しいシャードにすることもできます。

ワーカーやアプリケーションで障害が発生したが、この障害を検出しない場合、このアプリケーションの他のインスタンスが他の EC2 インスタンスで実行されているときには、これらのインスタンス上のワーカーが障害を処理します。これらのインスタンスは、障害が発生したワーカーで処理されなくなったシャードを処理するために、追加のレコードプロセッサを作成します。これにより、他の EC2 インスタンスの負荷は増加します。

ここで説明するシナリオでは、ワーカーやアプリケーションに障害が発生した場合でも、ホストしている EC2 インスタンスは実行されているため、Auto Scaling グループによって再起動されないことを前提としています。

Amazon EC2 インスタンスの障害

アプリケーションの EC2 インスタンスを Auto Scaling グループで実行することをお勧めします。このようにすることで、いずれかの EC2 インスタンスに障害が発生した場合でも、Auto Scaling グループによって、自動的にそのインスタンスを置き換える新しいインスタンスが起動されます。起動時に Amazon Kinesis Data Streams applicationを起動するようにこのインスタンスを設定する必要があります。