【问题标题】:Apache Storm : Relation between Executors ,Execute latency and Process latency?Apache Storm:执行器、执行延迟和进程延迟之间的关系?
【发布时间】:2015-07-22 07:25:57
【问题描述】:

将 1 个执行器分配给 Query Normalizer 的拓扑

将 4 个执行器分配给查询规范器的拓扑

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

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

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

所以,我的理解是,如果我增加执行器的数量,它应该会很低。因为并行度应该随着执行器的增加而增加。

我是不是误解了什么?

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

另外,进程延迟是否应该总是低于执行延迟?

上面显示的哪些拓扑在性能方面更好?另外,看到螺栓数据,我应该如何确定哪个拓扑比另一个运行得更好?

【问题讨论】:

    标签: performance parallel-processing apache-storm metrics


    【解决方案1】:

    查看 spout 中的“完全延迟”,即元组在拓扑内部平均花费的值,它已经规定了。

    所以,我的理解是,如果我增加执行器的数量,它应该会很低。因为并行度应该随着执行器的增加而增加。

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

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

    executed 表示你的 bolt 消耗了多少元组;发出意味着您的螺栓生成了多少元组(在您的情况下,我看到每个消耗的元组正在生成大约 4 个新元组); transfered 表示有多少发射的元组被转移到其他螺栓,例如你有两个螺栓从发射螺栓消耗,在这种情况下转移将等于发射的 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 个元组,样本量太小。最终的指标是 spout 上的“完全延迟”和失败元组的数量

    【讨论】:

    • 谢谢,很好的解释。
    猜你喜欢
    • 2013-05-03
    • 2011-01-25
    • 2018-02-25
    • 2011-09-23
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多