IBM Cloud Docs
Event Streams 可用性のサービス・レベル・アグリーメント (SLA)

Event Streams 可用性のサービス・レベル・アグリーメント (SLA)

標準プラン

Event Streams 標準プランは、マルチゾーン・リージョン・デプロイメントによる高可用性アーキテクチャーを提供します。 複数ゾーン・ロケーションでは、Event Streams サービスは 3 つのアベイラビリティー・ゾーンに分散されます。これは、クラスターが単一ゾーンまたはそのゾーン内のいずれかのコンポーネントの障害に対して回復力があることを意味します。

Event Streams サービスは、スタンダードプランで 99.99 %が利用可能となっています。 IBM Cloud®での高可用性サービスの SLA について詳しくは、以下を参照してください。 IBM Cloud(パブリック・クラウド)

Enterprise プラン

Event Streams エンタープライズ・プランは、マルチゾーン・リージョン・デプロイメントによる高可用性アーキテクチャーを提供します。 複数ゾーン・ロケーションでは、Event Streams サービスは 3 つのアベイラビリティー・ゾーンに分散されます。これは、クラスターが単一ゾーンまたはそのゾーン内のいずれかのコンポーネントの障害に対して回復力があることを意味します。

マルチゾーン地域展開では、 Event Streams サービスはエンタープライズプランで 99.99 %の可用性を提供しています。 IBM Cloudの高可用性サービスの SLA について詳しくは、 Service Level Agreements for IBM Cloud(パブリック・クラウド)を参照してください。

Event Streams サービスが シングルゾーンロケーション など、高可用性構成ではない環境で実行されている場合、可用性は 99.9 %となります。 IBM Cloudの非高可用性サービスの SLA について詳しくは、 IBM Cloud(パブリック・クラウド)を参照してください。

測定方法

サービス・インスタンスは、パフォーマンス、エラー率、および合成操作に対する応答を継続的にモニターされます。 障害が記録されます。 詳しくは、 Event Streamsのサービス状況を参照してください。

可用性とは、Kafka トピックからのメッセージを生成およびコンシュームするアプリケーションの機能を指します。

この可用性を実現するために必要な考慮事項

アプリケーションの観点からハイレベルの可用性を実現するには、接続性スループット、およびメッセージの一貫性と耐久性を考慮する必要があります。 ユーザーは、ビジネスのこれらの 3 つの要素を最適化するようにアプリケーションを設計する責任があります。

接続性

クラウドの動的な性質のため、アプリケーションは接続の切断を予期する必要があります。 接続の切断は、サービスの失敗とは見なされません。

再試行

Kafka クライアントは再接続ロジックを提供しますが、プロデューサーに対して明示的に再接続を有効にする必要があります。 詳細については retries プロパティを参照してください。 接続は 60 秒以内に再接続されます。

重複

再試行を有効にすると、メッセージが重複する可能性があります。 接続が失われたタイミングによっては、プロデューサーはメッセージがサーバーによって正常に処理されたかどうかを判断できない場合があるため、再接続時にメッセージを再度送信する必要があります。 重複メッセージを予期するようにアプリケーションを設計します。

重複を許容できない場合は、idempotentプロデューサー機能 ( Kafka 1.1 以降) を使用して、再試行中に重複が発生しないようにすることができます。 詳細については enable.idempotence プロパティを参照してください。

スループット

スループットは、クラスター内で送信および受信できる 1 秒あたりのバイト数として表されます。

標準プランの具体的なガイダンス

スループットのガイダンス情報については、制限と割り当て量 - 標準を参照してください。

エンタープライズ・プランの具体的なガイダンス

スループットのガイド情報は、制限と割り当て量 - エンタープライズを参照してください。

測定

アプリケーションのパフォーマンスを把握するために、アプリケーションを装備します。 例えば、送受信されたメッセージの数、メッセージ・サイズ、および戻りコードなどです。 アプリケーションの使用状況を理解すると、トピックに関するメッセージの保存期間など、リソースを適切に構成するのに役立ちます。

彩度

クラスターに生成できるトラフィックの限度に近づくと、プロデューサーがスロットルされ始め、待ち時間が増加し、最終的にタイムアウト・エラーなどのエラーが発生します。 構成によっては、メッセージの一貫性と耐久性も影響を受ける可能性があります。 詳しくは、メッセージの一貫性と耐久性を参照してください。

メッセージの一貫性と耐久性

Kafka は、受信したメッセージをクラスター内の他のノードに複製することにより、その可用性と耐久性を実現します。これらのノードは、障害が発生した場合に使用できます。 Event Streams は 3 つのレプリカ (default.replication.factor = 3) を使用します。これは、ノードによって受信される各メッセージが、異なるアベイラビリティー・ゾーンにある他の 2 つのノードに複製されることを意味します。 このように、ノードやアベイラビリティー・ゾーンが損失しても、データや機能は失われず、耐性があります。

プロデューサーacksモード

すべてのメッセージが複製されますが、アプリケーションは、プロデューサーのモードプロパティである acks を使用することで、生成したメッセージがサービスに転送される際の堅牢性を制御することができます。 このプロパティーによって、スピードを取るかメッセージ損失のリスクを取るかを選択できます。 Kafka 3.0では、デフォルトのクライアント設定は acks=all (このバージョンより前は acks=1 でした) です。 acks=all の設定は、接続先のブローカーとクラスター内の少なくとも 1 つのブローカーの両方がメッセージの受信を確認するとすぐに、プロデューサーが成功を返すことを意味します。 acks=all を使用する利点は、最高レベルの耐久性を提供し、メッセージ・データの損失に対する保護を提供することです。

同期レプリカ

Event Streams が使用する構成では、 Kafka は、各パーティション・レプリカのリーダーになるブローカーを 1 つ選択し、フォロワーになるブローカーを 2 つ選択します。 クライアントからのメッセージ・データは、パーティションのリーダーに送信され、フォロワーに複製されます。 フォロワーがリーダーについている場合、それらのフォロワーは「同期」レプリカと見なされます。 リーダーは、定義上、常に同期していると見なされます。

おそらく保守がブローカーに適用されているためにパーティションのリーダーが使用不可になった場合、 Kafka は自動的に他の同期レプリカのいずれかを選択して、新しいリーダーになります。 このプロセスは迅速に行われ、 Kafka クライアントによって自動的に処理されます。

クリーンでないリーダーの選挙

Event Streams は、クリーンでないリーダー選択を無効にします。 この設定は変更できません。

クリーンでないリーダーの選出 という用語は、パーティションのすべての同期レプリカが使用不可になった場合に、 Kafka がどのように対応するかを示しています。 クリーンでないリーダー選択が有効になっている場合、 Kafka は、同期しているかどうかに関係なく、パーティションのリーダーとして使用可能になる最初のレプリカを作成することによってリカバリーします。 これにより、リーダーとして選出されたレプリカが前のリーダーからすべてのメッセージ・データを複製していない場合、メッセージ・データが失われる可能性があります。 クリーンでないリーダー選択が無効になっている場合 ( Event Streamsの場合と同様)、 Kafka は同期レプリカが使用可能になるのを待機し、そのレプリカがパーティションの新しいリーダーになることを選択します。 これにより、クリーンでないリーダー選択が有効になっている場合に発生する可能性があるメッセージ・データ損失の可能性を回避できます。 トレードオフとして、リカバリーにかかる時間が長くなることがあります。これは、 Kafka が特定のブローカーがオンラインに戻るのを待機してからでないと、クライアントがメッセージ・データを生成してコンシュームできないことがあるためです。

単一ゾーン・ロケーション・デプロイメント

最大限の可用性を実現するために、IBM では、複数ゾーン・ロケーションに構築されている高可用性のパブリック環境を推奨しています。 複数ゾーン・ロケーションの場合、Kafka クラスターは 3 つのアベイラビリティー・ゾーンに分散されます。これは、クラスターに単一ゾーンまたはそのゾーン内のいずれかのコンポーネントでの障害に対する回復力があることを意味します。 一部のお客様は、地理的な近接性を必要とするため、地理的にローカルで単一ゾーンのロケーションに Event Streams クラスターをプロビジョニングすることを希望します。 Event Streams は、このデプロイメントモデルをサポートしていますが、可用性に関する以下のトレードオフに注意してください

  • 単一ゾーン・ロケーションには、クラスターが一定期間オフラインになる可能性をもたらすいくつかの種類の単一障害点が存在します。 例えば、データ・センター全体や更新の障害、または共有コンポーネント (基礎にあるハイパーバイザー、SAN、ネットワークなど) の障害などです。 単一ゾーン・ロケーションでは、これらの障害が SLA の低下に反映されます。

  • Kafka を複数のゾーンに分散させる利点は、クラスタ全体をダウンさせる可能性のある障害の発生を最小限に抑えることです。 これに対し、単一の障害がゾーン内のクラスタ全体をダウンさせる可能性は低い。 最悪のケースでは、データ損失の可能性もあります。 例えば、プロデューサーがacks=allを使用している場合でも、すべての Kafka ノードが同時にダウンすると、ブローカーが受信を確認したが、基礎となるファイル・システムがディスクへのフラッシュを完了していないメッセージがいくつか存在する可能性があります。 未送信のメッセージは、失われる可能性があります。

詳しくは、メッセージ確認応答を参照してください。 多くのユース・ケースで、これは必ずしも問題になるとは限りません。 しかし、いかなる状況においてもメッセージ損失が許容されない場合には、複数ゾーンを使用可能なクラスター、クロス・リージョン・レプリケーション、またはプロデューサー・サイドのメッセージ・チェックポイント指定を使用するなど、その他の戦略を検討してください。

詳しくは、単一ゾーン・クラスター複数ゾーン・クラスターを参照してください。