2013-06-05 236 views
2

我是Storm的新手,一直在探索其功能以符合我们的CEP要求。我偶然发现的不同例子通过消息代理,数据库实现轮询服务。如何实现基于推送的喷口,即在喷口内运行的Thrift服务器?我应该如何让我的客户知道我的喷嘴正在运行的位置,以便他们能够推送数据?推式风暴水龙头

+0

为什么不让他们将数据推到一个队列作为@Gordon提到... N则u消耗和饲料,以乌尔嘴的消息.. 。像[风暴](https://github.com/nathanmarz/storm/wiki)等类似[Kakfka](http://kafka.apache.org/)的消息队列可以让你的生活更美好,我相信..你的要求究竟是什么? – user2720864

回答

4

喷嘴的设计和打算投票,所以你不能推动他们。但是,许多人所做的就是使用像Redis,Thrift或Kafka这样的服务作为服务,您可以将消息推送给消费者,然后您的消费者就可以对消息进行轮询。

1

控制你在哪里和什么时候喷口运行是有限的,所以有外部过程直接与喷口进行通信有点麻烦。这当然是可能的,但这不是最简单的解决方案。

标准解决方案是将消息推送到某个外部消息队列,让您的喷口轮询该消息队列。

有一些做的正是这个常用消息队列服务,如卡夫卡,红隼和JMS,在storm-contrib

0

我没有一大堆的经验,无论是风暴或卡夫卡喷口实现/一般而言,红隼或CEP,但我正在寻找类似的解决方案 - 推动风暴喷口。如何使用事件源和Storm群集之间的负载平衡器?对于将rsyslog中的系统日志消息推送到Storm的用例,负载均衡器可以跟踪Storm节点正在运行的侦听节点,哪些节点正在运行,并根据不同的参数分配传入的负载。我不太愿意在来源和喷口之间引入另一层,如消息总线。

编辑:我读了你的博客并总结说,如果一个聆听鲸鱼嘴的唯一问题是一个消息来源如何找到它,那么消息总线可能是错误的答案。基于简单的网络状态或更高级别的应用程序逻辑,在接收器上引导网络流量有更简单/更好的解决方案。但是,是的,如果你想使用所有额外的消息总线功能,那么显然卡夫卡/凯斯特雷尔将是不错的选择。

0

这不是Storm的典型用法,显然你不能将同一台机器上的多个喷口实例绑定到同一个端口。在分布式设置中,存储API的当前IP地址和端口是个好主意,例如到ZooKeeper,然后平衡器将请求转发到您的API。

下面是简单的REST API项目上的风暴:

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