风暴并行理解

时间:2015-08-10 04:34:03

标签: parallel-processing apache-storm

我已经阅读了有关风暴并行的相关资料,但仍然不清楚。假设我们以推文处理为例。通常我们正在做的是检索推文流,计算每个推文的单词数量,并将数字写入本地文件。

我的问题是如何理解喷口和螺栓的平行度的价值。在builder.setSpout和builder.setBolt的功能中,我们可以分配并行值。但是在推文的字数统计的情况下,只有一个喷口应该设置是正确的吗?不止一个喷口被认为是第一个相同喷口的副本,相同的推文流入多个喷口。如果是这种情况,设置多个喷口的价值是多少?

另一个不明确的问题是如何将作品分配给螺栓?并联机制是否会以Storm的方式实现当前可用的螺栓来处理下一个喷出的喷口?我修改了计算代码的基本推文,以便将最终的计数结果写入特定目录,但是,所有结果实际上都组合在nimbus上的一个文件中。因此,在监督员处理数据后,所有结果将被发送回nimbus。如果这是真的,那么nimbus和主管之间的沟通机制是什么?

我真想弄清楚那些问题!感谢您的帮助!!

2 个答案:

答案 0 :(得分:1)

为大于1的spouts设置并行性要求用户代码为不同的实例执行不同的操作。否则(如您所述),数据仅通过拓扑发送两次。例如,您可以拥有要收听的端口列表(或不同Kafka主题的列表)。因此,您需要确保不同的实例监听不同的端口或主题......这可以通过查看拓扑元数据(如自己的任务ID和dop)在open(...)方法中实现。由于每个实例都有唯一的ID,因此您可以对端口/主题进行分区,以便每个实例从整个列表中选择不同的端口/主题。

关于并行性:这取决于将拓扑结合在一起时使用的连接模式。例如,使用shuffleGrouping会导致将发出的元组循环分配到消耗螺栓实例。对于这种情况,Storm不会"看起来"如果有任何螺栓实例可供处理。如有必要,元组只需在接收器上进行传输和缓冲。

此外,Nimbus和Supervisor只交换元数据。它们之间没有数据流(即元组流)。

答案 1 :(得分:0)

在某些情况下,例如"卡夫卡的消费者群体"你有队列行为 - 这意味着如果一个消费者从队列中读取,其他消费者将从队列中读取不同的消息。 这将从队列中分配所有工作人员的读取负载。 在这些情况下,您可以从队列中读取多个喷口

相关问题