2017-05-22 26 views
2

this articleに記載されているように、データフロージョブで自動スケーリングを有効にしようとしています。Google Cloud Dataflowで自動スケーリングが正常に機能しない

DataflowPipelineOptions options = PipelineOptionsFactory.as(DataflowPipelineOptions.class); 

options.setAutoscalingAlgorithm(AutoscalingAlgorithmType.THROUGHPUT_BASED) 

私はこれを設定し、私の仕事を展開した後、それは常に最大で動作します。私は、次のコードを経由して、関連するアルゴリズムを設定することにより、ということでした。使用可能なCPUの数です。つまり、最大作業者数を10に設定した場合、平均CPU使用率は約50%ですが、10台すべてのCPUが使用されます。このTHROUGHPUT_BASEDアルゴリズムはどのように機能し、どこで間違っているのですか?

ありがとうございました。

+0

あなたが達成しようとしていることは明確ではありません。 CPU使用率は100%ですか? –

+0

Pub/Subサブスクリプションからいくつかのイベントが発生しています。週末。だから、私は自分のデータフローの仕事が待ち時間なしですべてのイベントに追いつくように自分自身を適応させたい。この場合、私が5人の人数を手動で設定すると、待ち時間がなくなり、CPU使用率が〜90%になります。なぜなら、実行中のCPUが論理的ではないはずです。 – Ali

+0

完全な目的は_ "与えられた目的は、作業者の利用率とスループットを最大化しながらバックログを最小限に抑え、負荷の急上昇に迅速に反応することです。 90%のCPU使用率で処理するデータのバックログがデータフローにとって大きすぎる可能性があります。したがって、より軽く使用されるマシンの数が多くなり、バックログが小さくなります。 –

答えて

2

自動スケーリングはバックログとCPUの両方を削減しようとしますが、バックログの削減が優先されます。特定の値のバックログが重要な場合、Dataflowはバックログ/スループットとして「バックログを秒単位で」計算し、10秒未満に保つよう試みます。

あなたのケースでは、パイプライン実行に使用される永続ディスク(PD)に関するポリシーによるものであると私は考えています。 max workersが10の場合、Dataflowは10個の永続ディスクを使用し、これらのディスクがほぼ均等に分散されるようにいつでも作業者の数を維持しようとします。パイプラインの最大ワーカーが10の場合、パイプラインは7または8ではなく5にダウンスケーリングしようとします。さらに、スケーリング後のCPUを80%以下に維持しようとします。

この2つの要因によって、お客様のケースでダウンスケーリングが効果的に防止される場合があります。 CPU使用率が10人の場合、CPU使用率が50%の場合、5人の作業者のCPU使用率は100%になるため、目標の80%を超えているため、CPU使用率が低下しません。

Google Dataflowは、永続ディスクに依存せず、ダウンスケーリングの制限がない新しい実行エンジンで動作しています。

この問題を回避するには、max_workersを高く設定し、パイプラインが10以下のままになる可能性があります。しかし、それはPDのコストのわずかな増加を招く。

別のリモート可能性は時には推定「バックログ秒」をアップスケーリングした後でも十分なCPUと10秒の下に滞在しないかもしれないということです。これは、さまざまな要因(ユーザーコード処理、pubsubバッチ処理など)が原因である可能性があります。それがあなたのパイプラインに影響しているかどうか聞いてみたいと思います。

関連する問題