Apache flink 用Flink-CEP测量事件时间延迟

Apache flink 用Flink-CEP测量事件时间延迟,apache-flink,flink-cep,Apache Flink,Flink Cep,我已经用Flink CEP实现了一个模式,该模式匹配三个事件,例如a->B->C。在定义了我的模式之后,我生成了一个 PatternStream PatternStream=CEP.patterneventStream,pattern 具有PatternSelectFunction,以便 patternStream.selectnew MyPatternSelectFunction.print 这就像一个魅力,但我对所有匹配事件的事件时间感兴趣。我知道传统的Flink streaming API

我已经用Flink CEP实现了一个模式,该模式匹配三个事件,例如a->B->C。在定义了我的模式之后,我生成了一个

PatternStream PatternStream=CEP.patterneventStream,pattern

具有PatternSelectFunction,以便

patternStream.selectnew MyPatternSelectFunction.print

这就像一个魅力,但我对所有匹配事件的事件时间感兴趣。我知道传统的Flink streaming API提供了丰富的功能,允许您注册Flink的内部延迟跟踪器,如本文所述。我还看到Flink 1.8增加了一个新的RichPatternSelectFunction。但不幸的是,我无法用Flink CEP设置Flink 1.8


最后,是否有一种方法可以获取所有匹配事件的事件时间?

使用Flink的延迟跟踪不需要丰富的函数。您只需在Flink配置或ExecutionConfig中将latencyTrackingInterval设置为正数即可启用它,例如

env.getConfig().setLatencyTrackingInterval(1000);
然后,您可以在度量解决方案中观察结果,或者通过RESTAPI观察Flink web UI中未报告的延迟度量

更新:

延迟统计信息是作业度量,并且位于返回的列表中

http://<job_manager_rest_endpoint>/jobs/<job_id>/metrics

或者,您可以在事件进入作业的CEP部分之前,使用ProcessFunction向事件添加处理时间戳,然后再使用另一个ProcessFunction测量经过的时间。

使用Flink的延迟跟踪不需要丰富的函数。您只需在Flink配置或ExecutionConfig中将latencyTrackingInterval设置为正数即可启用它,例如

env.getConfig().setLatencyTrackingInterval(1000);
然后,您可以在度量解决方案中观察结果,或者通过RESTAPI观察Flink web UI中未报告的延迟度量

更新:

延迟统计信息是作业度量,并且位于返回的列表中

http://<job_manager_rest_endpoint>/jobs/<job_id>/metrics

或者,您可以在事件进入作业的CEP部分之前,使用ProcessFunction向事件添加处理时间戳,然后使用另一个ProcessFunction测量经过的时间。

谢谢您的回答。我已经将代码行添加到我的Flink程序中,但它仍然没有显示任何指标,无论是对于作业还是对于任务管理器。我是否必须启用总体指标,还是遗漏了其他指标?我已扩展了我的答案,以提供有关检查延迟指标的详细信息。感谢您扩展了我的答案。我现在已经完全理解了如何访问工作的指标。但不幸的是,当我将这些查询与各自的作业和操作员ID一起使用时,我只收到空响应。我已将“latencyTrackingInterval”设置为10。但即使是基本端点也只返回空响应。我尝试获取已完成作业的度量值是否重要?度量值反映当前状态。您需要设置metrics reporter,以便在外部度量系统中持久化度量-请参阅。还请注意,将latencyTrackingInterval设置为10可能会导致巨大的开销,特别是在扩大作业时,因为延迟跟踪标记会从每个源实例发送到每个操作员实例。通常不建议使用的采样延迟。大多数度量系统无法处理这种粒度级别。谢谢你的回答。我已经将代码行添加到我的Flink程序中,但它仍然没有显示任何指标,无论是对于作业还是对于任务管理器。我是否必须启用总体指标,还是遗漏了其他指标?我已扩展了我的答案,以提供有关检查延迟指标的详细信息。感谢您扩展了我的答案。我现在已经完全理解了如何访问工作的指标。但不幸的是,当我将这些查询与各自的作业和操作员ID一起使用时,我只收到空响应。我已将“latencyTrackingInterval”设置为10。但即使是基本端点也只返回空响应。我尝试获取已完成作业的度量值是否重要?度量值反映当前状态。您需要设置metrics reporter,以便在外部度量系统中持久化度量-请参阅。还请注意,将latencyTrackingInterval设置为10可能会导致巨大的开销,特别是在扩大作业时,因为延迟跟踪标记会从每个源实例发送到每个操作员实例。通常不建议使用的采样延迟。大多数度量系统无法处理这种粒度级别。
http://localhost:8081/jobs/94b189a96b98b3aafaba6db6aa8b770b/metrics?get=latency.source_id.bc764cd8ddf7a0cff126f51c16239658.operator_id.fd0ee602f2fa8d310d9bd9f694e185f5.operator_subtask_index.0.latency_p95