Flink 中的延迟指标代表什么?它们是否真的有效评估应用程序的延迟?

What does latency metrics represent in Flink and are them really valid to evaluate the latency of an application?

我开发了如下所示的管道:

 SingleOutputStreamOperator<String> stream = ...
     DataStream<String> branch2 = stream
                .getSideOutput(outputTag2)
                .keyBy(MetricObject::getRootAssetId)
                .window(TumblingEventTimeWindows.of(Time.seconds(180)))
                .trigger(ContinuousEventTimeTrigger.of(Time.seconds(15)))
                .aggregate(new CountDistinctAggregate(),new CountDistinctProcess())
                .name("windowed-count-distinct")
                .uid("windowed-count-distinct")
                .map(AggregationObject::toString)
                .name("get-toString");

我正在认真考虑一种评估从输入到输出的延迟的方法,但输入和输出之间的关系不是 1 对 1,但有很多转换使得延迟评估在概念上非常困难。我知道使用以下方法给出的延迟指标: env.getConfig().setLatencyTrackingInterval(1000),但我不明白它们代表什么以及如何在测试中使用它,我试图强调应用程序每秒发送不同数量的记录(10/s、20/s、50/s 和依此类推)并监视吞吐量何时开始下降、延迟开始增加以及背压开始。

Flink 的内置延迟指标衡量延迟跟踪标记从源传输到每个下游运算符实例所需的时间。这些标记与您的流记录一起移动,在网络队列中等待轮到它们,但会跳过您的用户功能。这意味着实际延迟会更大。

有关如何衡量和改善延迟的全面概述,请参阅 Getting into Low-Latency Gears with Apache Flink, the code for which is in https://github.com/ververica/lab-flink-latency。在这些作业中,自定义“eventTimeLag”直方图指标用于测量和报告延迟。

https://github.com/apache/flink-benchmarks 可能也有兴趣。