Flink应用程序中的延迟监视

时间:2019-06-13 10:55:25

标签: monitoring apache-flink metrics flink-streaming latency

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

比方说,我有一个使用以下运算符的简单流数据流: FlinkKafkaConsumer->地图->打印。

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

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

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

enter image description here

但是我不知道他们到底在测量什么?而且据我所知,延迟平均值似乎与延迟无关。

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

解决方案与LatencyMarker有关吗?如果是,如何在接收器操作中找到它以进行检索?

谢谢, 罗伊。

1 个答案:

答案 0 :(得分:2)

-从邮件列表中复制我的答案以供将来参考

嗨,罗伊,

有了Latency Tracking,您将获得LatencyMarkers从每个源运算符到每个下游运算符所花费的时间分布(每个非源运算符中每个源运算符默认为一个直方图,请参阅metrics.latency.granularity)。 。

LatencyMarkers定期注入源中,并流经拓扑。他们不能超过常规记录。 LatencyMarkers毫不延迟地通过函数(用户代码)。这意味着通过延迟跟踪测量的延迟将仅反映端到端延迟的一部分,尤其是在非背压情况下。在背压情况下,等待时间标记将在最慢的操作员之前排队(因为它们不能超过记录),并且等待时间将更好地反映管道中的实际等待时间。我认为,延迟标记不是衡量Flink应用程序中“面向用户/端对端延迟”的正确工具。对我来说,这是一个调试工具,可用于查找延迟或信道拥塞的来源。

我建议,不要使用延迟跟踪,而应在接收器运算符中自己添加直方图度量,该度量可描述当前处理时间与事件时间之间的差异,以在源处获得事件时间滞后的分布。如果您在来源(以及其他任何兴趣点)中都这样做,您将清楚地了解均匀时间滞后如何随时间变化。

希望这会有所帮助。

干杯

康斯坦丁