我最近刚开始使用apachestorm,刚刚完成了我的第一个拓扑(都是java的)。
下一步,我想把ti sensortag的传感器值放在这些拓扑中,ti sensortag连接到raspberry pi。
我可以通过http发送传感器数据,但我不确定如何实现一个工作喷口,它接收这些请求。
拓扑思想:它应该接收带有传感器值信息的http请求,将这些数据发送到拓扑中,然后使用bolt将它们写入文件/数据库。
到目前为止,我在stackoverflow上发现了一篇关于http喷口(storm:spout用于从端口读取数据)的帖子,但遗憾的是,我没有被允许留下评论或写任何私人消息(如果我错过了一些关于这个的内容,我很抱歉)。我不确定这个喷口到底是如何工作的,我想要一个示例代码(基本上我想知道整个东西是如何在拓扑中设置的)。
我也试着使用storm的drpc功能(http://storm.apache.org/releases/1.0.0/distributed-rpc.html)但到目前为止,我还无法进一步阅读文档和storm starter示例,因为我仍在学习如何正确使用storm。我对设置drpc服务器以及如何配置侦听传入请求的方法感到非常困惑。
所以我想知道,如果有人也面临着这个问题,并找到了解决办法或可以给我的建议,我还可以尝试什么。
这样一个http喷口(据我所见,是一个套接字连接?!)还是drpc服务器工作?
ps:还有一个代码模板,其他例子或任何其他信息来源,这可能有助于了解该主题将是很好的!
2条答案
按热度按时间lmvvr0a81#
我将编写一个servlet来使用这些http请求,并在收到请求时将相关信息写入kafka。然后可以使用kafka喷口(我会编写自己的喷口,但这是一个完全不同的问题)来读取数据并将其发送到拓扑中。将kafka用作中间转移位置的主要好处是能够通过重置提交的kafka偏移来重放数据。
vc9ivgsu2#
storm spout通常从数据源中提取数据,因此您所谈论的内容并不常见。这就是为什么chris提到使用kafka这样的排队产品作为storm和pi之间的缓冲。
它可能会做你所说的风暴喷口内。问题是当您开始从一台机器扩展到多台机器时,因为您的pi将不知道storm workers在哪个节点上运行,因此不知道http服务器在监听哪个节点。
我建议从简单开始。下面是我编写的一个简单的wordcounttopology,您可以在您的机器上本地运行:storm stlhug demo。
要开始,请至少在storm之外运行服务器:
pi不将http post发送到http服务器
http服务器将有效负载写入数据目录中的文件
storm spout轮询数据目录并处理文件