0

オペレーターを介してタプル/秒の数をキャプチャし、ファイルに記録したいと考えています。「Throttle Operator」を使用してタプル レートを自分で設定することはできません。また、もう一度付け加えておきますが、コンソールから情報を取得することについてではなく、SPL アプリケーションを介して情報を取得することについて話しているのです。

4

1 に答える 1

2

「このオペレーターのスループットを教えてください」という直接的な指標はありません。nTuplesProcessed経時的にメトリックにアクセスし、そこからスループットを計算するプリミティブ オペレーターを実装できます。(利用可能なメトリクスのリスト。)しかし、実際には、次の複合演算子を使用する方がはるかに簡単だと思います。

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;
    }
}

その後、コンポジット オペレーターを「スループット タップ」として使用できます。ここでは、スループットを記録するオペレーターからのストリームを消費します。たとえば、次のように使用できます。

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

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

もちろん、Resultアプリケーションの他の場所でストリームを使用することもできます。この方法は、アプリケーションのパフォーマンスに影響を与える可能性があることに注意してください。データ パスをタップしています。ただし、影響は大きくないはずです。特に、PeriodicThroughputSinkタップしているオペレーターと同じ PE にオペレーターが融合されていることを確認した場合はなおさらです。また、期間が短いほど、アプリケーションのパフォーマンスに影響を与える可能性が高くなります。

繰り返しますが、メトリックにアクセスすることで、C++ または Java プリミティブ オペレーターで同様のことを行うことができますがnTuplesProcessed、上記のアプローチの方がはるかに簡単です。アプリケーションの外部からシステム メトリックを取得することもできます。streamtool capturestateたとえば、 REST APIを定期的に使用するスクリプトを作成し、出力を解析して、関心nTuplesProcessedのあるオペレーターのメトリックを見つけ、それを使用してスループットを計算することができます。しかし、この複合演算子の手法ははるかに簡単だと思います。

于 2017-08-24T13:59:07.250 に答える