延迟指标在 Flink 中代表啥?它们真的可以用来评估应用程序的延迟吗?
Posted
技术标签:
【中文标题】延迟指标在 Flink 中代表啥?它们真的可以用来评估应用程序的延迟吗?【英文标题】:What does latency metrics represent in Flink and are them really valid to evaluate the latency of an application?延迟指标在 Flink 中代表什么?它们真的可以用来评估应用程序的延迟吗? 【发布时间】:2022-01-09 02:43:24 【问题描述】:我开发了如下图所示的管道:
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 等等) 并监控吞吐量何时开始下降、延迟开始增加以及背压开始。
【问题讨论】:
【参考方案1】:Flink 的内置延迟指标衡量延迟跟踪标记从源传输到每个下游运算符实例所需的时间。这些标记与您的流记录一起移动,在网络队列中等待轮到它们,但会跳过您的用户功能。这意味着实际的延迟会更大。
有关如何测量和改善延迟的全面概述,请参阅Getting into Low-Latency Gears with Apache Flink,其代码位于https://github.com/ververica/lab-flink-latency。在这些作业中,自定义“eventTimeLag”直方图指标用于测量和报告延迟。
https://github.com/apache/flink-benchmarks 也可能感兴趣。
【讨论】:
以上是关于延迟指标在 Flink 中代表啥?它们真的可以用来评估应用程序的延迟吗?的主要内容,如果未能解决你的问题,请参考以下文章
Apache Flink 在 UI 中显示自定义指标,但普罗米修斯指标报告器没有抓取它们
Flink 窗口延迟数据处理 AllowedLateness