我正在寻求有关延迟监视(flink 1.8.0)的帮助。
比方说,我有一个使用以下运算符的简单流数据流: FlinkKafkaConsumer->地图->打印。
如果我想测量数据流中记录处理的延迟,什么是最好的机会? 我想获得源接收到的处理输入的持续时间,直到接收器/完成接收器操作接收到输入的时间。
我添加了我的代码:env.getConfig()。setLatencyTrackingInterval(100);
然后,可以使用以下延迟指标:
但是我不知道他们到底在测量什么?而且据我所知,延迟平均值似乎与延迟无关。
我也尝试使用codahale指标来获取某些方法的持续时间,但这并没有帮助我获得在整个管道中处理的记录的延迟。
解决方案与LatencyMarker有关吗?如果是,如何在接收器操作中找到它以进行检索?
谢谢, 罗伊。
答案 0 :(得分:2)
-从邮件列表中复制我的答案以供将来参考
嗨,罗伊,
有了Latency Tracking,您将获得LatencyMarkers从每个源运算符到每个下游运算符所花费的时间分布(每个非源运算符中每个源运算符默认为一个直方图,请参阅metrics.latency.granularity)。 。
LatencyMarkers定期注入源中,并流经拓扑。他们不能超过常规记录。 LatencyMarkers毫不延迟地通过函数(用户代码)。这意味着通过延迟跟踪测量的延迟将仅反映端到端延迟的一部分,尤其是在非背压情况下。在背压情况下,等待时间标记将在最慢的操作员之前排队(因为它们不能超过记录),并且等待时间将更好地反映管道中的实际等待时间。我认为,延迟标记不是衡量Flink应用程序中“面向用户/端对端延迟”的正确工具。对我来说,这是一个调试工具,可用于查找延迟或信道拥塞的来源。
我建议,不要使用延迟跟踪,而应在接收器运算符中自己添加直方图度量,该度量可描述当前处理时间与事件时间之间的差异,以在源处获得事件时间滞后的分布。如果您在来源(以及其他任何兴趣点)中都这样做,您将清楚地了解均匀时间滞后如何随时间变化。
希望这会有所帮助。
干杯
康斯坦丁