Apache Storm:执行者之间的关系,执行延迟和进程延迟?

时间:2015-07-22 07:25:58

标签: performance parallel-processing apache-storm metrics

将1个执行程序分配给Query Normalizer的拓扑 Topology with 1 executor assigned to Query Normalizer

将4个执行程序分配给Query Normalizer的拓扑 Topology with 4 executor assigned to Query Normalizer

最初我运行拓扑时只将 1 执行程序分配给QueryNormalizer。 执行延迟 8.952 进程延迟 12.857

为了加快速度,我将QueryNormalizer中的执行程序数量更改为 4 执行延迟更改为 197.616 进程延迟 59.132

根据执行延迟的定义 - 元组在执行方法中花费的平均时间。 execute方法可以在不发送元组的Ack的情况下完成。

所以,我理解的是,如果我增加执行程序的数量,它应该是低的。随着执行程序的增加,并行性应该增加。

我误解了什么吗?

此外,发射,传输和执行的字段之间存在巨大差异。这是正常的吗?

此外,进程延迟是否应始终低于执行延迟?

上述哪种拓扑结构表现更好?另外,我应该如何确定哪个拓扑比另一个更好,看到螺栓数据?

1 个答案:

答案 0 :(得分:4)

看看spout中的“完全延迟”,即元组在拓扑中平均花费的值,它已经下令。

  

所以,我理解的是,如果我增加执行程序的数量,它应该是低的。随着执行程序的增加,并行性应该增加。

这意味着你现在有4个单元处理元组,每个单元当时处理1个元组,“理论上”允许你同时处理4个元组而不是1.你的元组看起来总是一样吗?这是,它们总是具有相同的复杂性吗?

Also, there is a huge difference between the emitted,transmitted and executed fields. Is this normal ?

执行意味着你的螺栓消耗了多少元组;发出意味着你的螺栓产生了多少元组(在你的情况下,我看到每个消耗的元组产生大约4个新元组);转移意味着有多少发射元组被转移到其他螺栓上,例如你有两个螺栓从螺栓发射消耗,在这种情况下转移将等于2 * nr的元组发射。

  

此外,进程延迟是否应始终低于执行延迟?

没有必要,例如在Nathan Marz定义:

Process latency is time until tuple is acked, execute latency is time spent in execute for a tuple

我可以举例说明我的一个拓扑结构,但这不会发生:

enter image description here

Which of the above shown topologies are better performance wise ? Also, How should I decide which topology is running better than the other , seeing the bolts data ? 
好吧,让他们跑更长一段时间。两者处理的元组都少于1000个,样本的大小太小。最终,指标是鲸鱼喷水的“完整潜伏期”和失败的元组数