2017-11-01 6 views
0

PubSubから読み込み、いくつかのフィールドを抽出してbigtableに書き込むデータフローストリーミングジョブがあります。私たちは、自動スケーリング時にデータフローのスループットが低下するのを観察しています。たとえば、データフロージョブが現在2人のワーカーで実行されていて、100メッセージ/秒の速度で処理している場合、自動スケーリング中に100メッセージ/秒のこのレートが低下し、何回か0に低下してから500メッセージに増加します/秒。私たちは毎回これを見ています。これは、オートスケーリング中にシステムのラグが高くなり、パブ/サブの応答されないメッセージが大きくなっています。自動スケーリング中にGoogle Dataflowスループットが低下する

これはデータフロー自動スケーリングの予想される動作ですか、それとも自動応答して未確認メッセージのスパイスを最小限に抑えながらこの100メッセージ/秒を維持する方法ですか?私は、パブ/サブのStackdriverとデータフローのスクリーンショットを添付しています2017-10-23_12_29_09-11538967430775949506

: (ご注意:100メッセージ/秒、500のメッセージ/秒は一例の数字です)

ジョブIDオートスケーリング。 enter image description here

enter image description here

enter image description here

プル要求毎回のデータフローの自動スケーリングの数の低下があります。私はタイムスタンプ付きのスクリーンショットを撮ることができませんでしたが、プルリクエストをドロップすると、時間データフロー自動スケーリングと一致します。 ===========編集:=======================

私たちは以下を使用してGCSに並列で書いています前述のウィンドウ処理。

​​

実際に何が起こっているWindowedFileNames.java

public class WindowedFileNames extends FilenamePolicy implements OrangeStreamConstants{ 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
private static Logger logger = LoggerFactory.getLogger(WindowedFileNames.class); 
protected final String outputPath; 
public WindowedFileNames(String outputPath) { 
    this.outputPath = outputPath; 
} 


@Override 
public ResourceId windowedFilename(ResourceId outputDirectory, WindowedContext context, String extension) { 
    IntervalWindow intervalWindow = (IntervalWindow) context.getWindow(); 
    DateTime date = intervalWindow.maxTimestamp().toDateTime(DateTimeZone.forID("America/New_York")); 

    String fileName = String.format(FOLDER_EXPR, outputPath, //"orangestreaming", 
      DAY_FORMAT.print(date), HOUR_MIN_FORMAT.print(date) + HYPHEN + context.getShardNumber()); 
    logger.error(fileName+"::::: File name for the current minute"); 
    return outputDirectory 
       .getCurrentDirectory() 
       .resolve(fileName, StandardResolveOptions.RESOLVE_FILE); 
} 

@Override 
public ResourceId unwindowedFilename(ResourceId outputDirectory, Context context, String extension) { 
    return null; 
} 





} 
+0

これを見て – Pablo

答えて

0

は、あなたのスループットが最初に減少していることであり、それは、労働者がスケールアップされている理由です。あなたは午前1:30の周りにあなたのパイプラインを見れば

は、一連のイベントはそうのようなものです:

  1. 午前1時23分ごろ、スループットが低下します。これによりバックログが構築されます。
  2. 午前1時28分頃、パイプラインのブロックが解除され、処理が開始されます。
  3. 大きなバックログのため、パイプラインは最大30人の作業者に拡張されます。

あなたは自動スケーリングUIを見ればまた、30人の労働者に上がるための正当化がある:パイプラインがそのと を追いつくことができるように

は「30に労働者の数を上げますバックログとその入力レートに追いつく。

+0

お返事ありがとうございました。スループットが低下する理由は何ですか?どのように私はこれをデバッグできますか? – rhg

+0

スループットの低下は、BigTableへの書き込みが遅いことが原因です。この問題はあなたの問題を引き起こしているほど大きいですか? – Pablo

+0

メッセージからいくつかのフィールドを抽出して大きなテーブルに書き出し、並行してウィンドウの生メッセージを1分の固定ウィンドウに入れ、10個のシャードを持つウィンドウ書き込みを使用して生データをGCSに書き込みます。 GCSへの書き込みがスループットの低下を引き起こしているかどうかは不明です。 – rhg

関連する問題