2016-11-25 74 views
2

我最近开始使用Apache Storm,刚完成构建我的第一个拓扑(全部使用java)。我将如何在Java中为Apache Storm实现HTTP Spout?

下一步,我想将来自连接到Raspberry Pi的TI SensorTag的传感器值放入其中一个拓扑中。

我能够通过HTTP发送传感器数据,但我不知道如何实现一个工作喷口,它接受这些请求。

拓扑思想:它应该带有传感器值信息的HTTP请求,将这些数据发送到拓扑中,然后使用螺栓将它们写入文件/数据库中。

到目前为止,我在Stackoverflow上发现了一篇关于HTTP-Spout(Storm : Spout for reading data from a port)的文章,但遗憾的是,我不允许留下评论或写任何私人消息(对不起,如果我错过了这些)。 我不确定这个喷口是如何工作的,想要求一个例子代码(基本上我想知道整个拓扑结构是如何设置的)。

另外我试图使用Storm的DRPC函数(http://storm.apache.org/releases/1.0.0/Distributed-RPC.html)将我的HTTP请求放入拓扑结构中,但是迄今为止我无法通过文档和风暴启动器实例进一步获得进一步的进展,因为即时通讯仍在学习如何正确使用风暴。我对设置drpc-server以及如何配置侦听传入请求感到非常困惑。

所以我想知道,如果有人也面临这个问题,并已找到解决方案或可以给我的建议,还有什么我可以尝试。

这样的HTTP-Spout(一个套接字连接,据我所见?!)或DRPC服务器工作?

ps:另外一个代码模板,其他例子或任何其他信息来源,这可能有助于了解有关该主题将是很好的!

回答

1

我会写一个servlet来使用这些HTTP请求,并在收到请求时将相关信息写入Kafka。然后,您可以使用Kafka喷口(我会自己编写喷口,但这是一个完全不同的问题)来读取数据并将其发送到拓扑中。使用Kafka作为中间分段位置的主要好处是可以通过重置承诺的Kafka偏移来重放数据。

+0

嗨克里斯, 谢谢你的回答! 我会仔细看看卡夫卡。我只想再提出一个问题。你提到过,你会使用一个servlet来处理请求......但是如何将这个servlet连接到Kafka /你将如何将数据写入Kafka? 只需要在servlet上使用一种方法作为某种Kafka生产者? –

+0

我会在servlet类上构造一个静态变量来保存生产者实例。 servlet上的doGet()方法只会整理HTTP请求上的数据,并使用生产者编写一个易于解析的String消息给Kafka主题。 servlet的init()方法可以用来保存生产者构造逻辑,并且我忘记了servlet拆卸方法的副作用,但是你会把生产者关闭逻辑放在那里。 –

0

风暴喷口的通常是从数据源拉数据,所以你在说什么不是很常见。这就是为什么Chris提到使用像Kafka这样的排队产品作为Storm和Pi之间的缓冲区。

这可能是可以做你在Storm喷口内说的。问题在于当你开始从一台机器扩展到多台机器时,因为你的Pi不知道Storm工作人员正在运行哪个节点,因此不知道HTTP服务器在哪里监听。

我会建议开始简单。这里是我写的一个简单的WordCountTopology,你可以在你的机器上本地运行:storm-stlhug-demo

要开始,至少跑风暴之外的服务器:

  1. 皮做HTTP发布到HTTP服务器
  2. HTTP服务器在数据目录中写入有效载荷将文件
  3. 风暴脱粒机轮询数据目录和处理文件
相关问题