问题
在使用广播状态时,广播流BroadcastConnectedStream和数据流DataStream(已经设置了以事件时间为时间戳和水位线)connect之后,水位线就消失了Null,数值一直是Long的最小值,导致了后面的累加操作一直没有到窗口时间,没有调用getResult,最后也一直没有输出。
解决方法
在connect之后先做一个基础算子操作让流变回DataStream,再重新设置时间戳和水位线。
直接给BroadcastConnectedStream设置是无效的
broadcastConnectedStream.map((MapFunction<Event, Event>) value -> value)
.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor<Event>(Time.seconds(10)) {
@Override
public long extractTimestamp(Event element) {
try {
SimpleDateFormat formatTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = formatTime.parse(element.capTime);
return date.getTime();
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
});
最后,可以看到在修改之后水位线正常了。