ストリーミング ジョブでのストラグラーのトラブルシューティング

ストリーミング パイプラインの場合、ストラグラーは、次の特性を持つ作業アイテムとして定義されます。

  • これにより、ウォーターマークの前進をある程度(数分程)防ぐことができます。
  • 同じステージ内の他の作業項目と比べると、処理に時間がかかります。

ストラグラーはウォーターマークを抑制し、ジョブにレイテンシを追加します。このラグがユースケースで許容できる場合は、何もする必要はありません。ジョブのレイテンシを短縮するには、まず、ストラグラーに対処する必要があります。

Google Cloud コンソールでストリーミング ストラングラーを表示する

Dataflow ジョブを開始した後、Google Cloud コンソールを使用して、検出されたストラグラーを表示できます。

ストリーミング ストラングラーは、ステージの進捗状況ビューまたはステージのワークフロー ビューで確認できます。

ステージの進捗状況ごとにストラングラーを表示する

ステージの進捗状況ごとにストラングラーを表示するには:

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

    [ジョブ] に移動

  2. ジョブの名前をクリックします。

  3. [ジョブの詳細] ページで、[実行の詳細] タブをクリックします。

  4. [グラフ表示] リストで、[ステージの進捗状況] を選択します。進捗状況グラフには、各ステージ内で検出されたすべてのストラグラーの集計数が表示されます。

    ステージの進行状況ビューのスクリーンショット。

  5. ステージの詳細を表示するには、ステージのバーにカーソルを合わせます。詳細ペインに、ワーカーログのリンクが表示されます。このリンクをクリックすると、ワーカーをスコープとする Cloud Logging と、ストラグラーを検出した時間範囲が表示されます。

    ストラングラーの詳細カードのスクリーンショット。

ステージ ワークフローごとにストラグラーを表示する

ステージ ワークフローごとにストラグラーを表示するには:

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

    ジョブに移動

  2. ジョブの名前をクリックします。

  3. [ジョブの詳細] ページで、[実行の詳細] タブをクリックします。

  4. [グラフ表示] リストで、[ステージのワークフロー] を選択します。ステージのワークフローでは、ジョブの実行ステージがワークフロー グラフとして表示されます。

    ステージのワークフロー ビューのスクリーンショット。

ストリーミング ストラングラーのトラブルシューティング

ストラングラーが検出された場合、パイプライン内のオペレーションが長時間実行されていることを意味します。

問題のトラブルシューティングを行うには、まず Dataflow の分析情報が問題を特定しているかどうかを確認します。

それでも原因を特定できない場合は、ストラグラーを報告したステージのワーカーログを確認します。関連するワーカーログを表示するには、ステージの進捗状況でストラングラーの詳細を確認します。ワーカーのリンクをクリックします。ワーカーをスコープとする Cloud Logging と、ストラグラーを検出した時間範囲が表示されます。ステージを遅くしている可能性のある次のような問題を探します。

  • DoFn コード内のバグ、または DoFns の停止。ストラングラーが検出された時点のタイムスタンプ付近で、ログのスタック トレースを確認します。
  • 完了までに長い時間がかかる外部サービスの呼び出し。この問題を軽減するには、外部サービスに対してバッチ呼び出しを行い、RPC にタイムアウトを設定します。
  • シンクの割り当て上限。パイプラインが Google Cloud サービスに出力される場合は、割り当ての引き上げができる場合があります。詳細については、割り当てを操作するをご覧ください。また、最適化戦略の詳細については、該当するサービスのドキュメントと、I/O コネクタのドキュメントをご覧ください。
  • 永続的な状態で大規模な読み取り / 書き込みオペレーションを行う DoFns。永続的な状態でより小規模な読み取りや書き込みを実行するように、コードをリファクタリングすることを検討してください。

[Side info] パネルを使用して、ステージで最も遅いステップを見つけることもできます。これらのステップの 1 つがストラグラーを引き起こしている可能性があります。ステップ名をクリックすると、そのステップのワーカーログが表示されます。

原因を特定したら、新しいコードでパイプラインを更新し、結果をモニタリングします。

次のステップ