风暴平行理解

7rfyedvj  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(318)

我已经阅读了风暴平行线的相关资料,但仍有一些不清楚的地方。假设我们以tweets处理为例。一般来说,我们所做的是检索推特流,计算每个推特的字数,并将这些数字写入本地文件。
我的问题是如何理解喷口和螺栓平行度的价值。在builder.setspout和builder.setbolt函数中,我们可以分配并行值。但就微博的字数统计而言,只设置一个喷口是否正确?不止一个喷口被认为是第一个相同喷口的复制品,相同的tweet通过这个喷口流入多个喷口。如果是这样,设置多个喷口的值是多少?
另一个不清楚的问题是如何分配螺栓的工作?并联机构是不是在暴风雪的方式下实现的,会找到目前可用的螺栓来加工下一个喷口?我修改了基本的tweets计数代码,这样最终的计数结果将被写入一个特定的目录,然而,所有的结果实际上被合并到nimbus上的一个文件中。因此,在处理主管的数据之后,所有结果都将被发送回nimbus。如果这是真的,那么nimbus和主管之间的沟通机制是什么?
我真的很想找出那些问题!!!谢谢你的帮助!!

8yparm6h

8yparm6h1#

在某些情况下,例如“kafka's consumer group”,您有队列行为—这意味着如果一个消费者从队列中读取消息,另一个消费者将从队列中读取不同的消息。这将把队列中的读取负载分配给所有工作进程。在这些情况下,您可以从队列中读取多个喷口

z0qdvdin

z0qdvdin2#

为大于1的喷口设置并行性,需要用户代码为不同的示例执行不同的操作。否则(正如您已经提到的),数据只需通过拓扑发送两次。例如,您可以有一个要侦听的端口列表(或一个不同Kafka主题的列表)。因此,您需要确保不同的示例侦听不同的端口或主题。。。这可以通过 open(...) 方法,通过查看拓扑元数据(如自己的任务id和dop)。由于每个示例都有一个唯一的id,因此可以对端口/主题进行分区,以便每个示例从整个列表中选择不同的端口/主题。
关于并行性:这取决于将拓扑连接在一起时使用的连接模式。例如,使用 shuffleGrouping 结果是将发出的元组循环分布到消耗的bolt示例。对于这种情况,如果有任何bolt示例可供处理,storm不会“查看”。如果需要的话,元组只是在接收端进行传输和缓冲。
此外,nimbus和supervisor只交换元数据。它们之间没有数据流(即元组流)。

相关问题