デフォルトでは、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 プロジェクト IDTEMPLATE_LOCATION: Flex テンプレート仕様ファイルへの Cloud Storage パスREGION: ジョブが実行されるリージョンKEY_1=VALUE_1、KEY_2=VALUE_2: Flex テンプレートの Key-Value パラメータ ペア
コンソール
Google Cloud コンソールでテンプレートまたは Flex テンプレートを実行するときにストリーミングの高可用性を有効にするには:
Google Cloud コンソールで、Dataflow の [ジョブ] ページに移動します。
[テンプレートからジョブを作成] をクリックします。
[Dataflow テンプレート] メニューから、実行するテンプレートを選択します。
[オプション パラメータ] を開きます。
[Additional experiments] フィールドに「
requires_high_availability」と入力します。[ジョブを実行] をクリックします。
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 コンピューティング単位数の一部として測定されます。
次のステップ
- Dataflow リージョンとリージョン配置の詳細を確認する。
- Streaming Engine の詳細。
- Monitoring でパイプラインをモニタリングする。