FlinkCEP

时间:2019-09-03 16:16:40

标签: java scala apache-flink flink-streaming flink-cep

我正在使用Flink和FlinkCEP来检测数据流上的复杂事件。出于研究目的,我只需要测量识别时间。

我正在使用Flink / FlinkCEP - 1.7.1。我正在使用env.fromCollection()函数在Flink环境中创建流。 之后,我将使用FlinkCEP:CEP.pattern(....)以及其他selectprint函数。

我只发现了这篇文章:Measure job execution time in flink很有帮助。它提出了一种返回流环境过程执行时间的解决方案。这不是我要找的东西。

我注意到返回的值包括诸如.assignAscendingTimestamps(x => x.TimeStamp())之类的其他运算符的时间,因此我无法使用它。

是否有一种方法只能测量CEP.pattern处理的时间? 在这种情况下,我也找不到能帮助我的指标,除非我错过了某些事情...

1 个答案:

答案 0 :(得分:0)

您可以在每个记录中添加一个时间戳字段,并在CEP之前使用mapFunction将当前时间放到该字段中。然后,使用该值立即在RichMapFunction中计算CEP内经过的时间-然后可以通过自定义指标进行报告,或将其发送到接收器。这会增加一些开销,但不会太多。只要可以避免这两个函数之间的任何keyBy或重新平衡调用,涉及的所有内容都将通过函数调用链接在一起,而不会产生任何序列化或网络开销。