monitoring - Flink 应用中的延迟监控

标签 monitoring apache-flink metrics flink-streaming latency

我正在寻求有关延迟监控 (flink 1.8.0) 的帮助。

假设我有一个简单的流式数据流,其中包含以下运算符: FlinkKafkaConsumer -> map -> 打印。

如果我想测量数据流中记录处理的延迟,最好的机会是什么? 我想获取源中接收到的处理输入的持续时间,直到它被接收器/完成的接收器操作接收到为止。

我已经添加了我的代码:env.getConfig().setLatencyTrackingInterval(100);

然后,可以使用以下延迟指标:

enter image description here

但我不明白他们到底在测量什么?此外,在我看来,延迟平均值似乎与延迟无关。

我也尝试过使用 codahale 指标来获取某些方法的持续时间,但它并没有帮助我获取在我的整个管道中处理的记录的延迟。

解决方案与LatencyMarker相关吗?如果是,我如何才能在我的接收器操作中到达它以便检索它?

谢谢, 罗伊。

最佳答案

-- 从邮件列表中复制我的回答以供将来引用

嗨罗伊,

通过延迟跟踪,您将获得 LatencyMarkers 从每个源运算符(operator)传输到每个下游运算符(operator)所花费的时间分布(每个非源运算符(operator)中每个源运算符(operator)默认一个直方图,请参阅 metrics.latency.granularity) .

LatencyMarkers 定期注入(inject)源中并流经拓扑。他们无法超越常规记录。 LatencyMarkers 通过函数(用户代码)没有任何延迟。这意味着延迟跟踪测量的延迟将仅反射(reflect)端到端延迟的一部分,特别是在非背压场景中。在背压场景中,延迟标记将在最慢的操作符之前排队(因为它们不能超过记录)并且延迟将更好地反射(reflect)管道中的真实延迟。在我看来,延迟标记不是衡量 Flink 应用程序中“面向用户/端到端延迟”的正确工具。对我来说,这是一个调试工具,用于查找延迟或拥塞 channel 的来源。

我建议,不要使用延迟跟踪,而是在接收器运算符中自己添加一个直方图指标,它描述了当前处理时间和事件时间之间的差异,以获得源端事件时间延迟的分布。如果您在源(以及任何其他兴趣点)中执行相同的操作,您将清楚地了解偶时滞后如何随时间变化。

希望这对您有所帮助。

干杯,

康斯坦丁

关于monitoring - Flink 应用中的延迟监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56578919/

相关文章:

stream - 如何在 Flink 中使用 ListState 进行 BroadcastProcessFunction

java - Apache Ignite 中的内存指标

java - 当 URL 相同时,如何区分 New relic 中的 GET 和 PUT 请求事务?

java - 监控 java native 内存

c# - 使用 C# 和 WMI 远程监控 Biztalk 2006 和 2010 服务器

scala - Flink 中滑动窗口的性能不佳

linux - 如何从 Perl 发起 SIP 调用并接收 DTMF 输入?

apache-flink - 关于状态以及什么对 Flink 更好

python - sklearn 随机森林的训练和测试数据准确度得分相同

charts - Kibana可视化指标选项?