2013-06-05 1 views
2

Suis un débutant dans Storm et ai exploré ses caractéristiques pour répondre à nos exigences CEP. Différents exemples que j'ai trébuché implémente des becs comme un service de sondage à partir d'un courtier de messages, base de données. Comment implémenter un goulot basé sur une poussée, c'est-à-dire un serveur Thrift fonctionnant à l'intérieur d'un goulot? Comment faire pour que mes clients sachent où mes becs sont en cours d'exécution, afin qu'ils puissent pousser des données dessus?Bec d'orage style push

+0

pourquoi ne pas les pousser à une file d'attente de données comme mentionné @Gordon .. n puis u consomment et nourrissent le message à ur .. becs verseurs Utiliser quelque chose comme [tempête] (https://github.com/nathanmarz/storm/wiki) avec une file d'attente de messages comme [Kakfka] (http://kafka.apache.org/) peut rendre votre vie beaucoup mieux je crois .. quoi exactement vos besoins? – user2720864

Répondre

4

Les becs sont conçus pour le sondage et vous ne pouvez pas les pousser. Cependant, ce que beaucoup de gens font, c'est utiliser des services comme Redis, Thrift, ou Kafka comme des services auxquels vous pouvez envoyer des messages, et votre bec peut les interroger.

1

Le contrôle que vous avez sur où et quand une goulotte s'exécute est limité, c'est donc un peu de tracas pour que les processus externes communiquent directement avec les goulottes. C'est certainement possible, mais ce n'est pas la solution la plus simple.

La solution standard consiste à envoyer des messages à une file d'attente de messages externe et à laisser vos canaux interroger cette file d'attente.

Il existe des implémentations de becs verseurs qui font exactement cela pour couramment utilisés les services de file d'attente de messages, tels que Kafka, Kestrel et JMS, dans storm-contrib

0

Je n'ai pas beaucoup d'expérience avec soit la tempête ou Kafka/Kestrel ou CEP, en général, mais je suis à la recherche d'une solution similaire - pousser à un bec de tempête. Pourquoi ne pas utiliser un équilibreur de charge entre la source d'événements et le cluster Storm? Pour mon cas d'utilisation des messages Syslog de rsyslog à Storm, un équilibreur de charge peut garder une trace de ce que les nœuds Storm exécutent un bec d'écoute et ceux qui sont en panne et répartir la charge entrante en fonction de différents paramètres. Je suis moins enclin à introduire une autre couche comme un bus de messages entre la source et le bec. Editer: J'ai lu votre blog et pour résumer, si le seul problème avec un bec d'écoute est comment une source le trouverait alors un bus de message pourrait être la mauvaise réponse. Il existe des solutions plus simples/meilleures pour diriger le trafic réseau sur un récepteur en fonction de l'état du réseau ou de la logique du niveau d'application. Mais oui, si vous voulez utiliser toutes les fonctions de bus de messages supplémentaires, alors évidemment Kafka/Kestrel serait de bonnes options.

0

Ce n'est pas une utilisation typique de Storm, il est évident que vous ne pouvez pas lier plusieurs instances du bec sur la même machine au même port. Dans une configuration distribuée, il serait judicieux de stocker l'adresse IP actuelle de l'API et le port, par ex. ZooKeeper et ensuite balancer qui transmettrait des demandes à votre API.

Voici un projet simple, API REST Storm:

https://github.com/timjstewart/restexpress-storm