由于一些空闲时间,活动时间没有提前

时间:2018-07-31 05:16:09

标签: apache-flink

在Flink事件时间模式下,我使用定期水印来提前事件时间。每个时隙从传入消息中提取事件时间并发出水印,然后减去网络延迟(例如3000毫秒)。

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);
        }

它可以解决问题,但是我不想使用机器的时间戳!如何解决该问题?

1 个答案:

答案 0 :(得分:0)

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

Idle Watermarks