Apache flink 活动时间为';由于某些空闲插槽,无法前进

Apache flink 活动时间为';由于某些空闲插槽,无法前进,apache-flink,Apache Flink,在Flink事件时间模式中,我使用周期性水印来提前事件时间。每个时隙从传入消息中提取事件时间并发出水印,减去网络延迟,例如3000ms public Watermark getCurrentWatermark() { return new Watermark(MAX_TIMESTAMP - DELEY); } 我有4个活动插槽。问题是只有两个插槽获得传入数据,但它们都调用方法getCurrentWatermark()。因此,在这种情况下,考虑线程1和线程

在Flink事件时间模式中,我使用周期性水印来提前事件时间。每个时隙从传入消息中提取事件时间并发出水印,减去网络延迟,例如3000ms

public Watermark getCurrentWatermark() {
            return new Watermark(MAX_TIMESTAMP - DELEY);
        }
我有4个活动插槽。问题是只有两个插槽获得传入数据,但它们都调用方法
getCurrentWatermark()
。因此,在这种情况下,考虑线程1和线程2获得输入数据,线程3和线程4不会出现的情况。
Thread-1-watermark ---> 1541217659806
Thread-2-watermark ---> 1541217659810
Thread-3-watermark ---> (0 - 3000 = -3000)
Thread-4-watermark ---> (0 - 3000 = -3000) 
因此,当Flink将最低的水印设置为普通水印时,时间不会继续!如果我将
getCurrentWatermark()
方法更改为:

public Watermark getCurrentWatermark() {
            return new Watermark(System.currentTimeMillis() - DELEY);
        }

这将解决问题,但我不想使用机器的时间戳!如何解决此问题?

有一种想法,即发送空闲水印以指示特定分区未接收任何数据,windows不应等待它。我个人从未尝试过它(甚至一些内置的东西,如卡夫卡连接器,也没有更新以使用它),但这是实现它的方法,至少: