Ich möchte die Anzahl der Tupel/Sek durch einen Operator erfassen und in einer Datei protokollieren. Ich kann 'Throttle Operator' nicht verwenden, um die Tupelrate selbst einzustellen. Um noch einmal hinzuzufügen, ich spreche nicht über die Erfassung der Informationen über die Konsole, sondern durch SPL-Anwendung.Gibt es eine Möglichkeit, Tupel/Sek durch einen Operator in IBM Streams (nicht durch Streams-Konsole) zu cappen
Antwort
Es gibt keine direkte "Geben Sie mir den Durchsatz für diesen Operator" Metrik verfügbar. Sie könnten einen primitiven Operator implementieren, der im Zeitverlauf auf die nTuplesProcessed
Metrik zugreift und daraus den Durchsatz berechnet. (Die list of available metrics.) Aber, ich habe es tatsächlich finden viel einfacher, den folgenden Verbund Operator verwenden:
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;
}
}
Anschließend können Sie den Composite-Operator als „Durchsatz tap“ verwenden, wo es den Strom, dessen von welchem Betreiber verbraucht Durchsatz, den Sie aufzeichnen möchten. Zum Beispiel können Sie es wie so verwenden:
stream<Data> Result = OperatorYouCareAbout(In) {}
() as ResultThroughput = PeriodicThroughputSink(Result) {
param period: 5.0;
file: "ResultThroughput.txt";
}
Natürlich können Sie dann noch den Result
Strom an anderer Stelle in Ihrer Anwendung verwenden. Beachten Sie, dass diese Methode möglicherweise Auswirkungen auf die Leistung der Anwendung hat: Wir tippen auf den Datenpfad. Die Auswirkungen sollten jedoch nicht groß sein, insbesondere, wenn Sie sicherstellen, dass die Operatoren in PeriodicThroughputSink
mit demselben Operator verknüpft sind wie jeder Operator, auf den Sie tippen. Je kürzer der Zeitraum ist, desto wahrscheinlicher wird es die Anwendungsleistung beeinflussen.
Wieder könnten wir etwas Ähnliches in einem C++ - oder Java-Primitivoperator tun, indem wir auf die nTuplesProcessed
Metrik zugreifen, aber ich finde den obigen Ansatz viel einfacher. Sie können die Systemmetriken auch außerhalb Ihrer Anwendung abrufen. Sagen wir, Sie könnten ein Skript haben, das in regelmäßigen Abständen streamtool capturestate
oder die REST-API verwendet, und dann die Ausgabe analysieren, die Metrik nTuplesProcessed
für den Operator finden, den Sie interessieren, und diesen zur Berechnung des Durchsatzes verwenden. Aber ich finde die Technik in diesem zusammengesetzten Operator viel einfacher.
- 1. Gibt es eine Möglichkeit, einen "verdoppelnden" Operator zu definieren?
- 2. Gibt es eine Möglichkeit, JLabel durch Integer
- 3. Gibt es eine Möglichkeit, "durch eine Liste zu führen"?
- 4. Gibt es eine Möglichkeit, eine Seite durch JavaScript zu erkennen?
- 5. Gibt es eine Möglichkeit, Zahlen durch Komma getrennt zu bekommen?
- 6. Gibt es eine Möglichkeit, Berührungen durch das iPhone zu übertragen?
- 7. Gibt es eine Möglichkeit, Lambda-Capture durch Referenz zu verhindern
- 8. Gibt es eine Möglichkeit, reddit Kommentare und Antworten durch JSON und nicht durch PRAW zu analysieren?
- 9. Gibt es eine effizientere Möglichkeit, eine Schleife durch mehrere Listen
- 10. Es gibt eine Möglichkeit, diese Sequenz von Streams zu erstellen?
- 11. Gibt es eine Möglichkeit, eine SetInterval-Schleife durch einen OnClick-Button zu töten
- 12. Gibt es eine Möglichkeit, das Pixel eines Bildes durch eine Datei/einen Pufferspeicher zu ersetzen?
- 13. Gibt es eine bessere Möglichkeit, diese Regex durch Perl anzupassen?
- 14. Gibt es eine Möglichkeit, einen Text in einer PDF-Datei durch itextsharp zu ersetzen?
- 15. Gibt es eine Möglichkeit, Doctrine in Symfony durch einen REST-Client zu ersetzen?
- 16. Gibt es eine Möglichkeit, eine Zeichenfolge durch eine logische Anweisung zu ersetzen (nicht, und, oder)
- 17. Gibt es eine Möglichkeit, einen Zweig in GIT zu sperren
- 18. Gibt es eine Möglichkeit, zu einer durch eine Variable in C definierten Zeile zu springen?
- 19. Gibt es eine Möglichkeit, den Arbeitsspeicher durch einen Prozess beim Start zu begrenzen
- 20. Gibt es eine Möglichkeit, einen InputStream zu teilen?
- 21. Gibt es eine Möglichkeit, ein Objekt durch einen Hash zu initialisieren?
- 22. Gibt es eine Möglichkeit, einen NULL-Wert an einen SQL-gespeicherten Proc durch XML senden?
- 23. Gibt es eine Möglichkeit, eine Beziehung zwischen zwei nicht verwandten Tabellen durch Fremdschlüssel zu finden?
- 24. Javascript - gibt es eine Möglichkeit, alle Elemente eines Arrays durch einen Befehl zu zerstören?
- 25. Gibt es eine Möglichkeit, einen Benutzer durch Ihre Website-Seiten zu verfolgen?
- 26. Gibt es eine Möglichkeit, einen Code-Block in Visual Studio durch Doppelklick wie in Eclipse auszuwählen?
- 27. Gibt es eine Möglichkeit, eine Zeichenfolge in Python durch jedes n-te Trennzeichen zu trennen?
- 28. gibt es eine Möglichkeit, dlopen durch den Quellcode in C zu implementieren, ohne libdl.so zu verwenden?
- 29. Gibt es eine Möglichkeit, den Lesebereich in Outlook 2007 durch eine VSTO CustomTaskBar zu ersetzen?
- 30. Gibt es eine Möglichkeit, eine Auswahlbox zu machen Dropdown durch Klicken auf eine Schaltfläche
Dank Scott, zuerst für die Beseitigung, dass es keinen solchen direkten Weg gibt, es zu erfassen; Ich hatte so etwas wie die Lösung, die Sie mir gegeben haben, wollte aber sicherstellen, dass ich es nicht zu kompliziert mache, wenn es einen direkten Weg gibt. Tolle Hilfe! –