我已经用Flink CEP实现了一个模式,该模式与三个事件(例如A->B->C
)匹配。定义模式后,我将生成一个
PatternStream<Event> patternStream = CEP.pattern(eventStream, pattern);
以PatternSelectFunction
这样
patternStream.select(new MyPatternSelectFunction()).print();
这就像一个咒语,但是我对所有匹配事件的事件时间都感兴趣。我知道传统的Flink流API提供了丰富的功能,可让您按照本question中的说明注册Flink的内部延迟跟踪器。我还看到,对于Flink 1.8,添加了新的RichPatternSelectFunction
。但是很遗憾,我无法使用Flink CEP设置Flink 1.8。
最后,有没有办法获取所有匹配事件的事件时间?
答案 0 :(得分:1)
您不需要Rich Function即可使用Flink的延迟跟踪。您只需要通过在Flink配置或ExecutionConfig中将latencyTrackingInterval
设置为正数来启用它,例如
env.getConfig().setLatencyTrackingInterval(1000);
然后您可以在指标解决方案中或通过REST API观察结果(Flink Web UI中不报告延迟指标)。
更新:
潜伏期统计信息是作业指标,在由...返回的列表中
http://<job_manager_rest_endpoint>/jobs/<job_id>/metrics
可以从中获取延迟指标值
http://<job_manager_rest_endpoint>/jobs/<job_id>/metrics?get=<metric_name>
这些指标的名称类似
latency.source_id.<ID>.operator_id.<ID>.operator_subtask_index.<SUBTASK>.<metric>
其中,ID标识作业图中正在测量延迟之间的源节点和操作员节点。
例如,通过此请求,我可以确定当前正在运行的作业中源与接收器之间的第95个百分位延迟:
http://localhost:8081/jobs/94b189a96b98b3aafaba6db6aa8b770b/metrics?get=latency.source_id.bc764cd8ddf7a0cff126f51c16239658.operator_id.fd0ee602f2fa8d310d9bd9f694e185f5.operator_subtask_index.0.latency_p95
或者,您可以使用ProcessFunction在事件进入工作的CEP部分之前为事件添加处理时间时间戳,然后再使用另一个ProcessFunction来测量经过的时间。