2016-11-25 1 views
2

J'ai récemment commencé avec Apache Storm et j'ai juste fini de construire mes premières topologies (toutes en java). Comme prochaine étape, je voulais mettre des valeurs de capteur à partir d'un TI SensorTag, qui est connecté à un Raspberry Pi, dans l'une de ces topologies.Comment implémenterais-je un Spout HTTP pour Apache Storm en Java?

Je suis en mesure d'envoyer les données de capteur via HTTP, mais je ne suis pas sûr de la façon dont je mettrais en œuvre un bec de travail, qui prend en charge ces demandes.

Idée de la topologie: Il faut prendre en compte les requêtes HTTP avec les informations de valeur du capteur, émettre ces données dans la topologie et les écrire dans un fichier/base de données, en utilisant un boulon. Jusqu'à présent, j'ai trouvé un post sur Stackoverflow, sur un HTTP-Spout (Storm : Spout for reading data from a port), mais malheureusement, je n'ai pas été autorisé à laisser un commentaire ou écrire des messages privés (Désolé si j'ai manqué quelque chose à ce sujet). Je ne suis pas sûr de la façon dont ce bec fonctionne exactement et je voulais demander un exemple de code (essentiellement, je voulais savoir comment tout cela a été mis en place dans la topologie).

J'ai également essayé d'utiliser la fonction DRPC de Storm (http://storm.apache.org/releases/1.0.0/Distributed-RPC.html) pour obtenir mes requêtes HTTP dans la topologie, mais je n'ai pas pu progresser plus loin dans la documentation et les exemples de tempête-démarreur jusqu'à présent, car J'apprends toujours comment utiliser la tempête correctement. J'étais vraiment confus à propos de la configuration du serveur drpc et de la configuration de l'écoute des requêtes entrantes. Donc, je voulais savoir, si quelqu'un était également confronté à ce problème et a trouvé une solution ou peut me donner des conseils, quoi d'autre que je pourrais essayer.

Est-ce qu'un tel HTTP-Spout (une connexion socket, pour autant que j'ai vu?!) Ou un serveur DRPC fonctionne? Ps: Un modèle de code, d'autres exemples ou d'autres sources d'informations, qui pourraient être utiles pour comprendre ce sujet, serait bien!

Répondre

1

J'écrirais plutôt une servlet pour consommer ces requêtes HTTP et, à la réception d'une requête, j'écrirais les informations pertinentes à Kafka. Vous pouvez alors utiliser le bec de Kafka (j'écrirais mon propre bec, mais c'est une toute autre question) pour lire ces données et les émettre dans votre topologie. Le principal avantage de l'utilisation de Kafka en tant qu'emplacement de transit intermédiaire est la possibilité de rejouer vos données en réinitialisant les décalages Kafka engagés.

+0

Salut Chris, merci pour votre réponse! Je vais regarder de plus près Kafka. J'aurais juste une autre question à ce sujet. Vous avez mentionné que vous utiliseriez un servlet pour la gestion des requêtes ... mais comment connecteriez-vous cette servlet à Kafka/comment écrirez-vous les données dans Kafka? Juste en utilisant une méthode sur le servlet comme une sorte de Kafka-producteur? –

+0

Je construirais une variable statique sur la classe servlet pour contenir l'instance du producteur. La méthode doGet() sur le servlet ne ferait que rassembler les données sur la requête HTTP et écrire un message String facilement analysable sur le sujet Kafka en utilisant le producteur. La méthode init() de la servlet pourrait être utilisée pour contenir la logique de construction du producteur et j'oublie la méthode de désassemblage de la servlet, mais vous y mettriez la logique de fermeture du producteur. –

0

Les becs de tempête sont habituellement en tirant des données d'une source de données ainsi ce dont vous parlez n'est pas très commun. C'est pourquoi Chris a mentionné l'utilisation d'un produit de mise en file d'attente comme Kafka à utiliser comme tampon entre Storm et votre Pi.

Il est peut-être possible de faire ce dont vous parlez à l'intérieur d'un bec de tempête. Le problème est lorsque vous commencez à passer d'une machine à une autre car votre Pi ne saura pas quels sont les nœuds sur lesquels les travailleurs de Storm travaillent et ne saura donc pas où le serveur HTTP écoute.

Je recommande de commencer simple. Voici un WordCountTopology simple que j'ai écrit que vous pouvez exécuter localement sur votre machine: storm-stlhug-demo.

Pour commencer, au moins exécuter le serveur en dehors de la tempête:

  1. Pi ne message HTTP à serveur HTTP
  2. HTTP Server écrit charge des fichiers dans un répertoire de données
  3. tempête sondages Spout la répertoire de données et traite les fichiers