roh*_*roh 2 monitoring metrics latency apache-flink flink-streaming
我正在寻找有关延迟监控的帮助(flink 1.8.0)。
假设我有一个简单的流数据流,具有以下运算符:FlinkKafkaConsumer -> Map -> print。
如果我想测量数据流中记录处理的延迟,最好的机会是什么?我想获取处理源中接收到的输入的持续时间,直到接收器/完成接收器操作接收到输入为止。
我添加了我的代码: env.getConfig().setLatencyTrackingInterval(100);
然后,可以使用以下延迟指标:
但我不明白他们到底在测量什么?此外,据我所知,延迟平均值似乎与延迟无关。
我还尝试使用 codahale 指标来获取某些方法的持续时间,但这并不能帮助我获取在整个管道中处理的记录的延迟。
该解决方案与 LatencyMarker 相关吗?如果是,我如何在接收器操作中到达它以检索它?
谢谢,罗伊。
小智 6
-- 从邮件列表中复制我的答案以供将来参考
嗨罗伊,
通过延迟跟踪,您将获得 LatencyMarkers 从每个源操作符到每个下游操作符所需的时间分布(默认情况下,每个非源操作符中的每个源操作符都有一个直方图,请参阅metrics.latency.capsularity)。
LatencyMarkers 定期注入源中并流经拓扑。他们无法超越常规记录。LatencyMarkers 毫无延迟地传递函数(用户代码)。这意味着通过延迟跟踪测量的延迟将仅反映端到端延迟的一部分,特别是在非背压场景中。在反压场景中,延迟标记将在最慢的运算符之前排队(因为它们无法超过记录),并且延迟将更好地反映管道中的真实延迟。在我看来,延迟标记并不是测量 Flink 应用程序中“面向用户/端到端延迟”的正确工具。对我来说,这是一个调试工具,用于查找延迟或拥塞通道的来源。
我建议,不要使用延迟跟踪,而是自己在接收器运算符中添加直方图度量,它描述当前处理时间和事件时间之间的差异,以获取源处事件时间延迟的分布。如果您在源(以及任何其他兴趣点)中执行相同的操作,您将很好地了解均匀时间延迟如何随时间变化。
希望这可以帮助。
干杯,
康斯坦丁