我正在使用Flink和FlinkCEP来检测数据流上的复杂事件。出于研究目的,我只需要测量识别时间。
我正在使用Flink / FlinkCEP - 1.7.1
。我正在使用env.fromCollection()
函数在Flink环境中创建流。
之后,我将使用FlinkCEP:CEP.pattern(....)
以及其他select
和print
函数。
我只发现了这篇文章:Measure job execution time in flink很有帮助。它提出了一种返回流环境过程执行时间的解决方案。这不是我要找的东西。
我注意到返回的值包括诸如.assignAscendingTimestamps(x => x.TimeStamp())
之类的其他运算符的时间,因此我无法使用它。
是否有一种方法只能测量CEP.pattern
处理的时间?
在这种情况下,我也找不到能帮助我的指标,除非我错过了某些事情...
答案 0 :(得分:0)
您可以在每个记录中添加一个时间戳字段,并在CEP之前使用mapFunction将当前时间放到该字段中。然后,使用该值立即在RichMapFunction中计算CEP内经过的时间-然后可以通过自定义指标进行报告,或将其发送到接收器。这会增加一些开销,但不会太多。只要可以避免这两个函数之间的任何keyBy或重新平衡调用,涉及的所有内容都将通过函数调用链接在一起,而不会产生任何序列化或网络开销。