Amazon Kinesis Data Streams の耐障害性 - Amazon Kinesis Data Streams

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Kinesis Data Streams の耐障害性

AWS グローバルインフラストラクチャは、 AWS リージョンとアベイラビリティーゾーンを中心に構築されています。 AWS リージョンは、低レイテンシー、高スループット、および高度の冗長ネットワークで接続されている複数の物理的に独立および隔離されたアベイラビリティーゾーンを提供します。アベイラビリティーゾーンでは、アベイラビリティーゾーン間で中断せずに、自動的にフェイルオーバーするアプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーンは、従来の単一または複数のデータセンターインフラストラクチャよりも可用性、耐障害性、およびスケーラビリティが優れています。

AWS リージョンとアベイラビリティーゾーンの詳細については、AWS 「 グローバルインフラストラクチャ」を参照してください。

Kinesis Data Streams では、 AWS グローバルインフラストラクチャに加えて、データの耐障害性とバックアップのニーズに対応できるように複数の機能を提供しています。

Amazon Kinesis Data Streams の災害対策

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

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

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

  • アプリケーションのインスタンスを 1 つ、または複数ホストしている EC2 インスタンスで障害が発生する

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

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

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

ワーカーまたは Amazon Kinesis Data Streams アプリケーションのインスタンスで障害が発生した場合は、状況を検出して処理する必要があります。例えば、Worker.run メソッドが例外をスローする場合、この例外を認識して処理する必要があります。

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

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

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

Amazon EC2 インスタンスの障害

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