将1个执行器分配给查询规范化器的拓扑
将4个执行器分配给查询规范化器的拓扑
最初我运行拓扑时,只有一个执行器分配给querynormalizer。执行延迟为8.952,进程延迟为12.857。
为了加快速度,我将querynormalizer中的执行者数量更改为4。执行延迟更改为197.616,进程延迟更改为59.132。
根据executelatency的定义,一个元组在execute方法中花费的平均时间。execute方法可以在不发送元组的ack的情况下完成。
所以,我的理解是,如果我增加执行器的数量,它应该是低的,因为并行度应该随着执行器的增加而增加。
我是不是误解了什么?
此外,发射、传输和执行字段之间存在巨大差异。这正常吗?
另外,进程延迟是否应该始终低于执行延迟?
上面显示的拓扑中,哪一种性能更好?另外,看到bolts数据,我应该如何决定哪个拓扑运行得比另一个更好?
1条答案
按热度按时间tct7dpnv1#
看看“完全延迟”在喷口,这是值元组花费在您的拓扑平均内部,它已颁布法令。
所以,我的理解是,如果我增加执行器的数量,它应该是低的,因为并行度应该随着执行器的增加而增加。
这意味着你现在有4个单元处理元组,每个单元一次处理1个元组,“理论上”让你同时处理4个元组而不是1个元组。你的元组看起来总是一样的吗?这就是,它们总是有同样的复杂性吗?
executed意味着你的bolt消耗了多少元组;emissed表示bolt生成了多少个元组(在您的例子中,我看到每个消耗的元组生成了大约4个新元组);transfered意味着有多少已发射的元组被传输到其他螺栓,例如,您有两个螺栓从螺栓发射中消耗,在这种情况下transfered将等于2*nr已发射的元组。
另外,进程延迟是否应该始终低于执行延迟?
不一定,例如nathan marz的定义:
我可以给你们举一个例子,我的一个拓扑结构,它不会发生这种情况:
好吧,让他们多跑一段时间。两者处理的元组都不到1000个,样本的大小太小。最终的度量是喷口上的“完全延迟”和失败元组的数量。