2017-08-23 2 views
0

オペレータからタプル数/秒を取得し、ファイルに記録します。タプルレートを自分で設定するために「スロットルオペレーター」を使うことはできません。また、もう一度追加するには、コンソールから情報をキャプチャするのではなく、SPLアプリケーションを使用します。IBM Streams(Streamsコンソールではない)のオペレータを介してタプル/秒をキャプチャする方法はありますか?

答えて

2

「この演算子のスループットを教えてください」というメトリックはありません。時間の経過とともにnTuplesProcessedメトリックにアクセスし、そのスループットを計算するプリミティブ演算子を実装できます。 (list of available metrics。)しかし、私は実際にそれがはるかに簡単に、次の複合演算子を使用して見つける:

public composite PeriodicThroughputSink(input In) { 
param expression<float64> $period; 
     expression<rstring> $file; 
graph 
    stream<boolean b> Period = Beacon() { 
     param period: $period; 
    } 

    stream<float64 throughput> Throughput = Custom(In; Period) { 
     logic state: { 
      mutable uint64 _count = 0; 
      float64 _period = $period; 
     } 

     onTuple In: { 
      ++_count; 
     } 

     onTuple Period: { 
      if (_count > 0ul) { 
       submit({throughput=((float64)_count/_period)}, Throughput); 
       _count = 0ul; 
      } 
     } 

     config threadedPort: queue(Period, Sys.Wait); // ensures that the throughput calculation and file 
                 // writing is on a different thread from the rest 
                 // of the application 
    } 

    () as Sink = FileSink(Throughput) { 
     param file: $file; 
       format: txt; 
       flush: 1u; 
    } 
} 

あなたは、それはその何でもオペレータからのストリームを消費し、「スループットタップ」、のような複合演算子を使用することができます録音するスループットを調整します。たとえば、あなたはとてもようにそれを使用することがあります。もちろん、あなたはまだあなたのアプリケーションの別の場所でResultストリームを使用することができます

stream<Data> Result = OperatorYouCareAbout(In) {} 

() as ResultThroughput = PeriodicThroughputSink(Result) { 
    param period: 5.0; 
      file: "ResultThroughput.txt"; 
} 

。このメソッドは、アプリケーションのパフォーマンスにある程度の影響を与える可能性があることに注意してください。データパスにタップを入れています。しかし、特に、あなたがタップしているオペレータと同じPEに融合されていることを確認した場合は、影響は大きくありません。また、期間が短いほど、アプリケーションのパフォーマンスに影響を与える可能性が高くなります。

また、nTuplesProcessedメトリックにアクセスすることで、C++またはJavaのプリミティブ演算子で同様のことを行うことができますが、上記の方法はずっと簡単です。また、アプリケーションの外部からシステムメトリックを取得することもできます。たとえば、streamtool capturestateまたはREST APIを定期的に使用するスクリプトを作成し、出力を解析し、関心のある演算子のメトリックを見つけて、スループットを計算することができます。しかし、私はこのコンポジット演算子のテクニックがはるかに容易であることがわかります

+0

Scottさん、最初にそれをキャプチャするような直接的な方法はないことを明らかにしました。私はあなたが与えた解決策のようなものを持っていましたが、直接的な方法があれば複雑すぎないようにしたいと思っていました。素晴らしい助け! –

関連する問題