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

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

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

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

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 つがストラグラーを引き起こしている可能性があります。ステップ名をクリックすると、そのステップのワーカーログが表示されます。

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

次のステップ