Apache Storm - 使用多个spouts?

时间:2015-01-05 06:49:43

标签: amazon apache-storm

因此,我尝试将我的spout配置为从Amazon SQS队列中读取。现在,我想要一种情况,我可以分享多个喷口的负载。

我理解它可能有多个线程,但是我可以有两个或更多个不同的spout实例/应用程序从同一队列读取并发送到相同的拓扑吗?例如。喷嘴A和喷口B从SQS读取,然后两者都发射到螺栓C?

2 个答案:

答案 0 :(得分:3)

当然,您可以有多个spout,但必须相应地定义它们以防止同一元素的双重提交(或者您的拓扑确实接受了设计)。例如,同一元素的多个进程意味着坏计数器。

检查Storm并发作为每个spout / bolt的执行程序(线程)和任务(实例)的开始,并选择所需的数字。

在你的代码中,你必须确保你没有管理相同的元组两次或更多次,要么你在暴风雨之前做到这一点(一个队列不接受同一个元素两次被许多人处理/清空)例如,spouts,或者多个队列 - 每个spout一个,要小心事务)或者你在风暴中执行它(只在一个spout中使用x param处理消息,在另一个spout中使用y,而在同一时间消息不能是x和y) )。

答案 1 :(得分:0)

SQS队列----->喷口(N执行器数)。

这个模型非常好。只要执行者实例中的任何一个将获取消息,消息将从SQS中变为不可见。

保持消息隐形时间远远高于Storm拓扑中的消息处理时间。

您可以在ack方法中保留删除SQS消息逻辑。