推风格的风暴喷口

时间:2013-06-05 11:00:29

标签: push apache-storm

我是Storm的新手,并且一直在探索其功能以符合我们的CEP要求。我偶然发现的不同示例将spout实现为来自消息代理,数据库的轮询服务。如何实现基于推送的喷口,即在喷口内运行的Thrift服务器?如何让我的客户了解我的鲸鱼喷水在哪里运行,以便他们可以推送数据呢?

4 个答案:

答案 0 :(得分:4)

Spouts旨在进行轮询,因此您无法推送它们。然而,许多人所做的是使用Redis,Thrift或Kafka之类的东西作为可以将消息发送到的服务,然后您的鲸鱼喷水可以轮询它们。

答案 1 :(得分:1)

您对喷口运行的位置和时间的控制是有限的,因此让外部进程直接与喷口进行通信会有点麻烦。这当然是可能的,但这不是最简单的解决方案。

标准解决方案是将消息推送到某个外部消息队列,并让您​​的spouts轮询此消息队列。

storm-contrib

中,有一些针对常用消息队列服务(例如Kafka,Kestrel和JMS)的spout实现

答案 2 :(得分:0)

我对Storm或Kafka / Kestrel或CEP一般都没有太多经验,但我正在寻找类似的解决方案 - 推动Storm风暴。如何在事件源和Storm集群之间使用负载均衡器?对于我将Syslog消息从rsyslog推送到Storm的用例,负载均衡器可以跟踪哪些Storm节点正在运行监听喷口以及哪些节点已关闭,并且还根据不同的参数分配传入负载。我不太倾向于在源和喷口之间引入另一层像消息总线。

编辑:我读了你的博客并总结一下,如果一个监听鲸鱼喷出的唯一问题是如何找到它,那么消息总线可能是错误的答案。基于简单的网络状态或更高的应用级逻辑,有更简单/更好的解决方案来在接收器处引导网络流量。但是,如果您想使用所有其他消息总线功能,那么显然Kafka / Kestrel将是不错的选择。

答案 3 :(得分:0)

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

这是一个在Storm上使用简单REST API的项目:

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

相关问题