我正在寻求有关延迟监控(Flink1.8.0)的帮助。
假设我有一个简单的流式数据流,有以下操作符:flinkkafkaconsumer->map->print。
如果我想测量数据流中记录处理的延迟,最好的机会是什么?我想获取处理源中接收到的输入的持续时间,直到接收/完成接收操作接收到为止。
我已经添加了代码:env.getconfig().setlatencytrackinginterval(100);
然后,可以使用以下延迟度量:
但我不明白他们到底在测量什么?另外,延迟平均值似乎不相关的延迟,因为我看到它。
我还尝试使用codahale度量来获取某些方法的持续时间,但这无助于获取在整个管道中处理的记录的延迟。
解决方案是否与latencymarker有关?如果是,我如何在我的接收器操作中找到它以便检索它?
谢谢,罗伊。
1条答案
按热度按时间envsm3lx1#
--从邮件列表中复制我的答案以备将来参考
嗨,罗伊,
通过延迟跟踪,您将获得延迟标记从每个源操作符到每个下游操作符所用时间的分布(每个非源操作符中的每个源操作符的默认直方图,请参阅metrics.latency.granularity)。
迟发性标记被周期性地注入源中,并且在拓扑中流动。他们不能超过常规记录。latencymarkers毫不延迟地传递函数(用户代码)。这意味着延迟跟踪测量的延迟将仅反映端到端延迟的一部分,特别是在非背压场景中。在背压场景中,延迟标记将在最慢的操作符之前排队(因为它们不能超过记录),并且延迟将更好地反映管道中的真实延迟。在我看来,延迟标记不是度量flink应用程序中“面向用户/端到端延迟”的合适工具。对我来说,这是一个调试工具,可以找到延迟或拥挤通道的来源。
我建议您不要使用延迟跟踪,而是自己在sink操作符中添加一个直方图度量,它描述当前处理时间和事件时间之间的差异,以获得源处事件时间延迟的分布。如果您在源代码(以及任何其他感兴趣的点)中执行相同的操作,您将很好地了解偶数时间差是如何随时间变化的。
希望这有帮助。
干杯,
康斯坦丁