2016-11-25 16 views
2

Ich habe vor kurzem mit Apache Storm begonnen und gerade meine ersten Topologien fertiggestellt (alles in Java).Wie würde ich einen HTTP-Spout für Apache Storm in Java implementieren?

Als nächsten Schritt wollte ich Sensor-Werte von einem TI SensorTag, der mit einem Raspberry Pi verbunden ist, in eine dieser Topologien einfügen.

Ich kann die Sensordaten über HTTP senden, aber ich bin mir nicht sicher, wie ich einen Arbeitsauslauf implementieren würde, der diese Anfragen aufnimmt.

Idee der Topologie: Sie sollte die HTTP-Requests mit den Sensorwertinformationen aufnehmen, diese Daten in die Topologie einspeisen und anschließend mit einer Schraube in eine Datei/Datenbank schreiben.

Bisher habe ich einen Beitrag auf Stackoverflow gefunden, über einen HTTP-Spout (Storm : Spout for reading data from a port), aber leider durfte ich keinen Kommentar hinterlassen oder private Nachrichten schreiben (Sorry wenn ich etwas verpasst habe). Ich bin mir nicht sicher, wie genau diese Tülle funktioniert und wollte nach einem Beispiel-Code fragen (hauptsächlich wollte ich wissen, wie die ganze Sache in der Topologie eingerichtet wurde).

Auch ich habe versucht, die DRPC-Funktion von Storm (http://storm.apache.org/releases/1.0.0/Distributed-RPC.html) zu verwenden, um meine HTTP-Anfragen in die Topologie zu bekommen, aber ich konnte die Dokumentation und Storm-Starter-Beispiele bisher nicht weiterverfolgen Ich lerne immer noch, wie man Sturm richtig benutzt. Ich war wirklich verwirrt darüber, den drpc-Server einzurichten und wie man die eingehenden Anfragen abhört.

Also ich wollte wissen, ob jemand auch mit diesem Problem konfrontiert war und eine Lösung gefunden hat oder mir Ratschläge geben kann, was ich sonst noch versuchen könnte.

Würde so ein HTTP-Spout (eine Socket-Verbindung, soweit ich gesehen habe ?!) oder ein DRPC-Server funktionieren?

ps: Auch eine Code-Vorlage, andere Beispiele oder andere Informationsquellen, die hilfreich sein könnten, um dieses Thema zu verstehen, wäre nett!

Antwort

1

Ich würde stattdessen ein Servlet schreiben, um diese HTTP-Anfragen zu konsumieren, und nach Erhalt einer Anfrage die relevanten Informationen an Kafka schreiben. Sie können dann den Kafka-Auslauf verwenden (ich würde meinen eigenen Auslauf schreiben, aber das ist eine ganz andere Frage), um diese Daten zu lesen und in Ihre Topologie zu emittieren. Der Hauptvorteil bei der Verwendung von Kafka als Zwischenspeicherort ist die Möglichkeit, Ihre Daten durch Zurücksetzen der festgelegten Kafka-Offsets wiederzugeben.

+0

Hallo Chris, Vielen Dank für Ihre Antwort! Ich werde Kafka genauer unter die Lupe nehmen. Ich hätte nur noch eine Frage dazu. Sie haben erwähnt, dass Sie ein Servlet für die Bearbeitung der Anfrage verwenden würden ... aber wie würden Sie dieses Servlet mit Kafka verbinden/wie würden Sie die Daten in Kafka schreiben? Verwenden Sie einfach eine Methode auf dem Servlet als eine Art Kafka-Produzent? –

+0

Ich würde eine statische Variable in der Servlet-Klasse konstruieren, um die Producer-Instanz zu halten. Die Methode doGet() des Servlets würde nur die Daten der HTTP-Anfrage marshallen und eine leicht analysierbare String-Nachricht mit dem Producer an das Kafka-Thema schreiben. Die init() -Methode des Servlets könnte verwendet werden, um die Erzeugerkonstruktlogik zu halten, und ich vergesse, was die Servlet-Abtrennmethode ist, aber Sie würden Ihre Erzeugerlogik dorthin bringen. –

0

Storm Tülle sind in der Regel Ziehen Daten aus einer Datenquelle, so was Sie sprechen, ist nicht sehr häufig. Deshalb hat Chris erwähnt, dass man ein Warteschlangen-Produkt wie Kafka als Puffer zwischen Storm und deinem Pi verwendet.

Es kann möglich sein, zu tun, worüber Sie sprechen, in einem Sturmauslauf. Das Problem ist, wenn Sie beginnen, von einer Maschine auf viele zu skalieren, weil Ihr Pi nicht weiß, auf welchen Knoten die Storm-Arbeiter laufen und daher nicht wissen, wo der HTTP-Server gerade hört.

Ich würde empfehlen, einfach zu starten. Hier ist eine einfache WordCountTopology geschrieben, die Sie lokal auf Ihrem Computer ausführen können: storm-stlhug-demo.

  • HTTP Server Nutzlast, um Dateien in einem Datenverzeichnis
  • Sturm Spout Umfragen schreibt die
    1. Pi macht HTTP-Post zu HTTP-Server:

      Um zumindest laufen die Server außerhalb des Sturms loszulegen Datenverzeichnis und verarbeitet die Dateien

  • Verwandte Themen