Flink:当ProcessAllWindowFunction花费的时间超过windowAll()中定义的TumblingProcessingTimeWindows时会发生什么情况 [英] Flink: What happens when ProcessAllWindowFunction takes more time than the TumblingProcessingTimeWindows defined in windowAll()

查看:109
本文介绍了Flink:当ProcessAllWindowFunction花费的时间超过windowAll()中定义的TumblingProcessingTimeWindows时会发生什么情况的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个ProcessAllWindowFunction实现(请参阅下面代码中的AttributeBackLogEvents()),它有相当多的I/O,可能需要30秒以上。windowAll()正在使用30秒的TumblingProcessingTimeWindows对数据进行窗口化。

attributedStream
            .windowAll(TumblingProcessingTimeWindows.of(Time.seconds(30)))
            .process(new AttributeBackLogEvents())
            .forceNonParallel()
            .addSink(ConfluentKafkaSink.createKafkaSinkFromApplicationProperties())
            .name("Enriched Event kafka topic sink");

AttributeBackLogEvents根据传递的迭代量从MySQL获取一组事件,经过处理后删除部分MySQL获取的事件。我看到当前窗口正在获取的记录(理想情况下,应该在下一个窗口触发之前删除)也会被下一个窗口获取,这意味着即使当前窗口正在处理,下一个窗口也会被触发。

我的问题是:

  1. AttributeBackLogEvents是否仍在运行并且触发下一个窗口?
  2. 如果是,那么如何强制执行该操作,直到当前窗口处理完成,下一个窗口不应触发。

推荐答案

此Q不描述逻辑中发生的情况,但在概念上: 您的窗口意味着"源数据的时间范围",因此在下一个窗口开始之前,对此的任何处理都无法完全完成。

可能有一种方法,但对于流工具,MySQL之类的源通常被视为参考数据(您通常希望经常阅读),除非您正在进行更改数据捕获。

这篇关于Flink:当ProcessAllWindowFunction花费的时间超过windowAll()中定义的TumblingProcessingTimeWindows时会发生什么情况的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆