java 风暴Kafka多喷口,如何分担负荷?

kuarbcqp  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(278)

我正在尝试在多个喷口之间分担任务。我有一种情况,我一次从外部源获得一个元组/消息,我希望有一个喷口的多个示例,其主要目的是共享负载和提高性能效率。
我可以对一个喷口本身做同样的事情,但是我想在多个喷口之间分担负载。我无法得到分散负载的逻辑。因为消息的偏移量直到特定的喷口完成对部分的消耗(即基于缓冲区大小集)才会被知道。
谁能给我们介绍一下如何计算逻辑/算法吗?
提前谢谢你的时间。
更新答案:
现在在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-应分配给执行此喷口的任务数。每个任务将在集群中某个进程的线程上运行。

fhg3lkii

fhg3lkii1#

我在storm user中遇到过一次讨论,讨论了一些类似的事情。
读取喷口平行度和Kafka分区数之间的关系。
使用Kafka喷口拍摄《Storm》时需要注意的两件事
kafkaspout的最大并行度是分区数。
我们可以将负载分为多个Kafka主题,并为每个主题提供单独的喷口示例。即每个喷口处理一个单独的主题。
因此,如果我们有这样一种情况,即每个主机的kafka分区配置为1,主机数为2。即使我们把喷口平行度设为10,最大重复值也只会是2,即分区数。
如何提及Kafka喷口的隔板数量?

List<HostPort> hosts = new ArrayList<HostPort>();
hosts.add(new HostPort("localhost",9092));
SpoutConfig objConfig=new SpoutConfig(new KafkaConfig.StaticHosts(hosts, 4), "spoutCaliber", "/kafkastorm", "discovery");

如您所见,这里可以使用 hosts.add 分区号在 new KafkaConfig.StaticHosts(hosts, 4) 代码段。
如何提及Kafka喷口中的平行暗示?

builder.setSpout("spout", spout,4);

在将喷口添加到拓扑中时,可以使用 setSpout 方法。这里是并行性提示。
更多可能有用的链接
理解风暴拓扑的并行性
twitter中的任务是什么
免责声明:!!我对storm和java都是新手!!!!因此,请编辑/添加,如果它需要一些地方。

相关问题