我正在尝试在多个喷口之间分担任务。我有一种情况,我一次从外部源获得一个元组/消息,我希望有一个喷口的多个示例,其主要目的是共享负载和提高性能效率。
我可以对一个喷口本身做同样的事情,但是我想在多个喷口之间分担负载。我无法得到分散负载的逻辑。因为消息的偏移量直到特定的喷口完成对部分的消耗(即基于缓冲区大小集)才会被知道。
谁能给我们介绍一下如何计算逻辑/算法吗?
提前谢谢你的时间。
更新答案:
现在在Kafka上使用多分区(即 5
)
使用的代码如下: builder.setSpout("spout", new KafkaSpout(cfg), 5);
通过注入 800 MB
每个分区上的数据 ~22 sec
完成阅读。
再次使用并行度为1的代码
即。 builder.setSpout("spout", new KafkaSpout(cfg), 1);
现在需要更多的时间 ~23 sec
! 为什么?
根据storm docs setspout()声明如下:
public SpoutDeclarer setSpout(java.lang.String id,
IRichSpout spout,
java.lang.Number parallelism_hint)
哪里,
parallelism\u hint-应分配给执行此喷口的任务数。每个任务将在集群中某个进程的线程上运行。
1条答案
按热度按时间fhg3lkii1#
我在storm user中遇到过一次讨论,讨论了一些类似的事情。
读取喷口平行度和Kafka分区数之间的关系。
使用Kafka喷口拍摄《Storm》时需要注意的两件事
kafkaspout的最大并行度是分区数。
我们可以将负载分为多个Kafka主题,并为每个主题提供单独的喷口示例。即每个喷口处理一个单独的主题。
因此,如果我们有这样一种情况,即每个主机的kafka分区配置为1,主机数为2。即使我们把喷口平行度设为10,最大重复值也只会是2,即分区数。
如何提及Kafka喷口的隔板数量?
如您所见,这里可以使用
hosts.add
分区号在new KafkaConfig.StaticHosts(hosts, 4)
代码段。如何提及Kafka喷口中的平行暗示?
在将喷口添加到拓扑中时,可以使用
setSpout
方法。这里是并行性提示。更多可能有用的链接
理解风暴拓扑的并行性
twitter中的任务是什么
免责声明:!!我对storm和java都是新手!!!!因此,请编辑/添加,如果它需要一些地方。