支持我有两个不同的数据流,使用事件时间。
class TSWM implements AssignerWithPunctuatedWatermarks<POJO> {
long maxTS = Long.MIN_VALUE;
@Override
public Watermark checkAndGetNextWatermark(POJO event, long l) {
maxTS = Math.max(maxTS, event.TS);
return new Watermark(getMaxTimestamp());
}
@Override
public long extractTimestamp(POJO event, long l) {
maxTS = Math.max(maxTS, event.TS);
return event.TS;
}
}
DataStream ds1 = ... .assignTimestampsAndWatermarks(new TSWM()) DataStream<POJO> ds2 = ... .assignTimestampsAndWatermarks(new TSWM())
所以现在我有两个不同的数据流,我的问题是,时间戳和水印是独立于每个数据流的还是一个集中的时钟?
我正在做一些其他复杂的窗口和重新分配的时间戳和水印,它不产生窗口数据,所以我觉得水印或时间戳是一个问题。
1条答案
按热度按时间x3naxklr1#
从某种意义上说,水印是“全球性的”,但要注意以下几点:
水印的每个并行示例都有自己的水印
当一个操作符连接两个流(例如,一个协处理函数)时,它的水印是传入水印的最小值
与Kafka你可以安排每个Kafka分区水印