如何衡量风暴中每个元组的端到端延迟?

时间:2016-03-22 08:59:45

标签: java apache-storm latency

我目前在风暴中测量一种新的分组方法,因此吞吐量和延迟最重要,但在测量每个元组的端到端延迟时遇到了一些困难。

我尝试在元组内部加时间戳并计算在拓扑下游收到它时的延迟,但结果中存在负数。

因为我在群集模式下运行拓扑,所以无法在群集中的机器之间精确地同步时间(我尝试了NTP,但它也不够精确),这可能是问题的原因。

Storm本身也提供了某种方法来衡量每个元组的端到端延迟吗?或者我可以用来达到目的的任何技巧?

1 个答案:

答案 0 :(得分:1)

终于得到了解决方案!

我们实现了自己的spout并实现了IRichSpout接口,在我们的nextTuple()方法中,我们为元组分配了一个唯一ID,并将时间戳放入ConcurrentHashMap,然后通过这样做发出ID

collector.emit(new Values(str), ID);

让风暴意识到为元组分配了一个ID,因此在我们的ack(Object msgId)方法中,我们通过给出键msgId来检查hashmap中的时间,将它与当前时间进行比较,我们得到了这个元组的延迟!

当我们将spout parallelism设置为1时,我们不必再担心时间同步问题了。