现在Storm Spouts有一个开放的方法来配置它们,而Bolts有一个准备方法。有没有办法让所有Spout实例等待Bolts上的所有准备方法听取它们的完成?
我有一个案例,我希望将一些配置信息动态传递给螺栓(因为此配置信息一直在变化)。我在一些地方读过我们应该使用Zookeeper或像redis这样的内存键值存储来执行此操作。我担心的是,如果Bolts尚未准备好从Spouts处理数据,Spouts会开始发出元组,会发生什么?有没有办法让Spouts等待Bolts的更新说他们已经准备好了?
答案 0 :(得分:2)
我发现了一个稍微优雅的解决方案(我认为)。问题是某些螺栓需要配置信息才能处理传入的元组。我发现了Storm重播元组的能力,所以现在我的螺栓听一个喷口的更新,另一个的元组。只要我没有收到更新,我就会让元组失败并让喷嘴在可配置的时间后重播它们。
答案 1 :(得分:0)
是的,您可以使用Redis存储配置,然后从prepare
方法读取它。
工作进程调用prepare
方法,该方法在完成后开始处理元组。实际上,我认为在工作进程的所有组件都准备就绪之前不会发出元组。 http://nathanmarz.github.io/storm/doc-0.8.1/index.html
最后,您可以使用额外的喷嘴来查找配置更改。然后,如果有更新的配置,它将通过命名流发送到您的螺栓。
答案 2 :(得分:0)
你不必担心这个。 Storm框架在Spout之前加载Bolt。 Storm以相反的顺序加载螺栓。拓扑结束时的螺栓在拓扑中间的螺栓之前加载,最后加载Spout。