Apache Storm:执行者、执行延迟和进程延迟之间的关系?
Apache Storm : Relation between Executors ,Execute latency and Process latency?
具有 1 个执行程序分配给查询规范器的拓扑
将 4 个执行程序分配给查询规范器的拓扑
最初我是 运行 我的拓扑,只有 1 执行程序分配给 QueryNormalizer。 执行延迟为8.952,进程延迟为12.857 .
为了让它更快,我将 QueryNormalizer 中的执行程序数量更改为 4。 执行延迟 更改为 197.616 和 处理延迟 到 59.132.
根据执行延迟的定义 – 元组在执行方法中花费的平均时间。 execute 方法可能会在不为元组发送 Ack 的情况下完成。
所以,我的理解是,如果我增加 executors.As 的数量,并行度应该会随着执行程序的增加而增加。
我是不是误解了什么?
另外,emitted,transmitted,executed 字段也有很大的区别。这正常吗?
此外,进程延迟是否应始终低于执行延迟?
上面显示的拓扑结构中的哪个在性能方面更好?另外,看到螺栓数据,我应该如何决定哪个拓扑 运行 比另一个更好?
看看 spout 中的 "complete latency",这是元组在你的拓扑中平均花费的值,它已经规定了。
So, What I understand is it should be low if I increase the number of executors.As the parallelism should increase as the executor increases.
这意味着你现在有 4 个单元处理元组,每个单元一次处理 1 个元组,"theoretically" 让你同时处理 4 个元组而不是 1 个。你的元组看起来总是一样的吗?也就是说,它们是否总是具有相同的复杂性?
Also, there is a huge difference between the emitted,transmitted and executed fields. Is this normal ?
executed 表示你的 bolt 消耗了多少元组; emitted 表示你的 bolt 生成了多少元组(在你的例子中,我看到每个消耗的元组生成大约 4 个新元组); transferred 表示有多少发出的元组被转移到其他螺栓,例如,您有两个螺栓从螺栓发射中消耗,在这种情况下,转移将等于发出的元组的 2 * nr。
Also, Should process latency be always lower than the execute latency ?
不一定,例如在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 个元组,样本量太小。最终指标是 spout 上的 "complete latency" 和失败元组的数量 。
具有 1 个执行程序分配给查询规范器的拓扑
将 4 个执行程序分配给查询规范器的拓扑
最初我是 运行 我的拓扑,只有 1 执行程序分配给 QueryNormalizer。 执行延迟为8.952,进程延迟为12.857 .
为了让它更快,我将 QueryNormalizer 中的执行程序数量更改为 4。 执行延迟 更改为 197.616 和 处理延迟 到 59.132.
根据执行延迟的定义 – 元组在执行方法中花费的平均时间。 execute 方法可能会在不为元组发送 Ack 的情况下完成。
所以,我的理解是,如果我增加 executors.As 的数量,并行度应该会随着执行程序的增加而增加。
我是不是误解了什么?
另外,emitted,transmitted,executed 字段也有很大的区别。这正常吗?
此外,进程延迟是否应始终低于执行延迟?
上面显示的拓扑结构中的哪个在性能方面更好?另外,看到螺栓数据,我应该如何决定哪个拓扑 运行 比另一个更好?
看看 spout 中的 "complete latency",这是元组在你的拓扑中平均花费的值,它已经规定了。
So, What I understand is it should be low if I increase the number of executors.As the parallelism should increase as the executor increases.
这意味着你现在有 4 个单元处理元组,每个单元一次处理 1 个元组,"theoretically" 让你同时处理 4 个元组而不是 1 个。你的元组看起来总是一样的吗?也就是说,它们是否总是具有相同的复杂性?
Also, there is a huge difference between the emitted,transmitted and executed fields. Is this normal ?
executed 表示你的 bolt 消耗了多少元组; emitted 表示你的 bolt 生成了多少元组(在你的例子中,我看到每个消耗的元组生成大约 4 个新元组); transferred 表示有多少发出的元组被转移到其他螺栓,例如,您有两个螺栓从螺栓发射中消耗,在这种情况下,转移将等于发出的元组的 2 * nr。
Also, Should process latency be always lower than the execute latency ?
不一定,例如在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 个元组,样本量太小。最终指标是 spout 上的 "complete latency" 和失败元组的数量 。