2017-06-20 14 views
1

私はPubSubからメッセージを読むデータフローを持っています。私はAPIのカップルを使用してこのメ​​ッセージを豊かにする必要があります。私はすべてのレコードを処理するためにこのAPIの単一インスタンスを使用したいと考えています。これは、すべてのリクエストに対してAPIを初期化しないようにするためです。シングルトンin Google Dataflow

静的変数を作成しようとしましたが、APIが何度も初期化されています。

Google Dataflowで変数を何度も初期化しないようにするにはどうすればよいですか?

答えて

1

Dataflowでは複数のマシンを並列に使用してデータ分析を行うため、マシンごとに少なくとも1回はAPIを初期化する必要があります。

実際、Dataflowではこれらのマシンの寿命が保証されていないため、比較的頻繁にアクセスしたり移動したりする可能性があります。

簡単な方法あなたの仕事へのアクセス外部サービスを持って、あまりにも多くのAPIは、あなたのDoFnでそれを初期化する初期化を回避するために:あなたはビームやデータフローは、時間を保証するため、これを実行する必要があり

class APICallingDoFn extends DoFn { 
    private ExternalServiceHandle handle = null; 

    @Setup 
    public void initializeExternalAPI() { 
     // ... 
    } 

    @ProcessElement 
    public void processElement(ProcessContext c) { 
     // ... process each element -- setup will have been called 
    } 
} 

DoFnインスタンス、またはワーカーに割り当てられます。

これが役に立ちます。

+0

私にとって、APIは1台のマシンで複数回初期化されています。しかし、私は '' @ Setup'''を使っていません。 – sag

+0

このAPIは、DoFnインスタンスごとに1回初期化されます。前述のように、DataFlowはDoFnインスタンスの寿命を保証しません。 – Pablo

関連する問題