ストリーミングの高可用性

デフォルトでは、Dataflow ストリーミング ジョブは、一部のバックエンド リソースを単一の Compute Engine ゾーンで実行します。これにより、ゾーンの停止中にデータが失われる可能性があります。ストリーミングの高可用性により、リージョン内の複数のゾーンにバックエンドの状態を複製することで、Streaming Engine ジョブがリージョン リソースになります。ストリーミングの高可用性を有効にすると、単一ゾーンの障害が発生しても、ストリーミング ジョブが停止することはありません。

サポートと制限事項

ストリーミングの高可用性には、次の要件と制限事項があります。

  • Streaming Engine が必要: ジョブは、Streaming Engine を使用するストリーミング パイプラインである必要があります。
  • リージョン ワーカーの配置が必要: Compute Engine ワーカーはリージョン配置を使用する必要があります。ジョブに特定のゾーンのワーカーのみがあり、そのゾーンが使用できなくなると、バックエンドの状態が複製されていても、ワーカーが使用できないため、ジョブはデータを処理できません。そのため、ストリーミングの高可用性が有効になっている場合、Dataflow は特定のワーカーゾーン(--workerZone、--worker_zone、--zone など)を指定するジョブを拒否します。
  • ジョブの作成時にのみ構成可能: ストリーミングの高可用性は、新しいジョブを開始するときにのみ有効にできます。インプレース パイプライン更新を実行するときに、ストリーミングの高可用性を有効または無効にすることはできません。実行中のパイプラインでこの設定を変更するには、自動停止と置換の更新を実行するか、パイプラインを停止またはドレインして、--update フラグを指定せずに新しいジョブを開始します。
  • 追加のウォーターマーク ラグ: ストリーミングの高可用性を有効にすると、データが処理され、ゾーン間で複製された後にのみ、ジョブのウォーターマークが進行します。ウォーターマークはクロスゾーン レプリケーションを待機するため、ウォーターマークのラグが数秒長くなることがあります。
  • リソースベースの課金が必要: ストリーミング高可用性ジョブは常にリソースベースの課金を使用し、データ処理課金は使用しません。ジョブでリソースベースの課金が使用されていても、プレビュー期間中はストリーミングの高可用性に対して追加料金は発生しません。詳細については、料金をご覧ください。

ストリーミングの高可用性を有効にする

新しい Dataflow ストリーミング ジョブを起動するときにストリーミングの高可用性を有効にするには、requires_high_availability サービス オプションを設定します。

Java

--dataflowServiceOptions=requires_high_availability

Python

--dataflow_service_options=requires_high_availability

Go

--dataflow_service_options=requires_high_availability

gcloud

gcloud dataflow jobs run コマンドを使用してテンプレートを実行する場合、または gcloud dataflow flex-template run コマンドを使用して Flex テンプレートを実行する場合は、--enable-streaming-engine フラグと --additional-experiments フラグを指定します。

--enable-streaming-engine \
--additional-experiments=requires_high_availability

たとえば、ストリーミングの高可用性を有効にして Flex テンプレートを実行するには、次のようにします。

gcloud dataflow flex-template run JOB_NAME \
    --project=PROJECT_ID \
    --template-file-gcs-location=TEMPLATE_LOCATION \
    --region=REGION \
    --parameters=KEY_1=VALUE_1,KEY_2=VALUE_2 \
    --enable-streaming-engine \
    --additional-experiments=requires_high_availability

次の値を置き換えます。

  • JOB_NAME: Dataflow ジョブの名前
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID
  • TEMPLATE_LOCATION: Flex テンプレート仕様ファイルへの Cloud Storage パス
  • REGION: ジョブが実行されるリージョン
  • KEY_1=VALUE_1、KEY_2=VALUE_2: Flex テンプレートの Key-Value パラメータ ペア

コンソール

Google Cloud コンソールでテンプレートまたは Flex テンプレートを実行するときにストリーミングの高可用性を有効にするには:

  1. Google Cloud コンソールで、Dataflow の [ジョブ] ページに移動します。

    [ジョブ] に移動

  2. [テンプレートからジョブを作成] をクリックします。

  3. [Dataflow テンプレート] メニューから、実行するテンプレートを選択します。

  4. [オプション パラメータ] を開きます。

  5. [Additional experiments] フィールドに「requires_high_availability」と入力します。

  6. [ジョブを実行] をクリックします。

REST

Flex テンプレートを起動するときに、RuntimeEnvironment オブジェクトまたは FlexTemplateRuntimeEnvironment オブジェクトの additionalExperiments フィールドを使用します。

{
  "additionalExperiments": ["requires_high_availability"]
}

フェイルオーバーの動作

ゾーン フェイルオーバーが発生した場合、ジョブが新しいプライマリ状態に切り替わり、別のゾーンに新しいセカンダリ レプリカが確立される間、スループットが数秒から数分間低下することがあります。フェイルオーバーはデータをドロップすることなく自動的に行われ、ユーザーによる操作は必要ありません。高可用性をモニタリングするで説明されている指標を使用して、フェイルオーバー イベントを追跡できます。

ソースとシンク

Dataflow ジョブをリージョン リソースとして構成しても、ジョブのソースとシンクが自動的にリージョンまたはグローバルになるわけではありません。リージョン ソースとグローバル ソースの両方とシンクは、単一のゾーンに依存しないため、ストリーミングの高可用性と相性が良いです。各ソースまたはシンクの可用性は、そのサービスの構成によって異なります。

  • Pub/Sub、BigQuery、Google Cloud Managed Service for Apache Kafka などの多くの Google Cloud ソースとシンクは、デフォルトでリージョンまたはグローバルな可用性を提供します。
  • セルフホストの Apache Kafka や Apache Iceberg などのカスタム ソースとシンクを使用する場合は、リージョンでの可用性を個別に構成して維持する必要があります。

高可用性をモニタリングする

Cloud Monitoring で dataflow.googleapis.com/job/high_availability_mode 指標を使用して、ジョブの高可用性ステータスをモニタリングできます。このブール値ゲージ指標には、ジョブの現在のステータスが true で、その他のステータスが false の status ラベルが含まれています。status ラベルには次の値を使用できます。

  • Disabled: このジョブでストリーミングの高可用性が有効になっていません。
  • Highly Available: ストリーミングの高可用性が有効になり、バックエンドの状態がゾーン間で複製されます。
  • Establishing High Availability: バックエンドの状態は一時的に複製されませんが(ゾーン障害の後など)、新しいセカンダリ レプリカが作成されています。

ストリーミングの高可用性を有効にすると、標準の Dataflow ウォーターマーク指標は、データが処理され、ゾーン間で複製された後にのみ進みます。指標の表示の詳細については、Monitoring を使用するをご覧ください。

料金

プレビュー期間中は、ストリーミング高可用性の使用に追加料金はかかりません。

一般提供(GA)では、レプリケーションの使用量はプライマリ状態の使用量と同じレートで課金されます。状態の使用量は、Streaming Engine コンピューティング単位数の一部として測定されます。

次のステップ