将1个执行程序分配给Query Normalizer的拓扑
将4个执行程序分配给Query Normalizer的拓扑
最初我运行拓扑时只将 1 执行程序分配给QueryNormalizer。 执行延迟 8.952 且进程延迟 12.857 。
为了加快速度,我将QueryNormalizer中的执行程序数量更改为 4 。执行延迟更改为 197.616 和进程延迟至 59.132 。
根据执行延迟的定义 - 元组在执行方法中花费的平均时间。 execute方法可以在不发送元组的Ack的情况下完成。
所以,我理解的是,如果我增加执行程序的数量,它应该是低的。随着执行程序的增加,并行性应该增加。
我误解了什么吗?
此外,发射,传输和执行的字段之间存在巨大差异。这是正常的吗?
此外,进程延迟是否应始终低于执行延迟?
上述哪种拓扑结构表现更好?另外,我应该如何确定哪个拓扑比另一个更好,看到螺栓数据?
答案 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
我可以举例说明我的一个拓扑结构,但这不会发生:
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个,样本的大小太小。最终,指标是鲸鱼喷水的“完整潜伏期”和失败的元组数。