【发布时间】:2013-08-18 12:52:41
【问题描述】:
我正在尝试在多个 spout 之间共享任务。我有一种情况,我一次从外部源获取一个元组/消息,并且我想要一个 spout 的多个实例,其主要目的是分担负载并提高性能效率。
我可以对一个 Spout 本身做同样的事情,但我想在多个 Spout 之间分担负载。我无法获得分散负载的逻辑。因为直到特定的 spout 完成消费部分(即基于缓冲区大小集)才会知道消息的偏移量。
任何人都可以对如何解决逻辑/算法提出一些亮点吗?
提前感谢您的宝贵时间。
响应答案更新:
现在在 Kafka 上使用了多分区(即
5)以下是使用的代码:
builder.setSpout("spout", new KafkaSpout(cfg), 5);
通过在每个分区上使用800 MB 数据泛洪进行测试,并用~22 sec 完成读取。
再次,使用parallelism_hint = 1的代码
即builder.setSpout("spout", new KafkaSpout(cfg), 1);
现在需要更多~23 sec!为什么?
根据StormDocssetSpout()声明如下:
public SpoutDeclarer setSpout(java.lang.String id,
IRichSpout spout,
java.lang.Number parallelism_hint)
where,
parallelism_hint - 应该分配给执行这个 spout 的任务数。每个任务都将在集群周围某个进程的线程上运行。
【问题讨论】:
标签: java load-balancing apache-storm apache-kafka