我的要求是将 30 天的数据保存到流中,以便在任何一天进行处理。所以当 FLINK 应用程序启动的第一天,它将从数据库中获取 30 天的数据并合并到当前的流数据中。我的挑战是 - 管理 30 天的数据窗口。如果我创建滑动窗口 30 天,滑动时间为 1 天。就像是
WatermarkStrategy<EventResponse> wmStrategy = WatermarkStrategy.<EventResponse>forBoundedOutOfOrderness(Duration.ofMillis(1))
.withTimestampAssigner((eventResponse, l) -> eventResponse.getLocalDateTime().toEpochSecond(ZoneOffset.MAX));
ds.assignTimestampsAndWatermarks(wmStrategy)
.windowAll(SlidingEventTimeWindows.of(Time.days(30), Time.days(1)))
.process(new ProcessAllWindowFunction<EventResponse, Object, TimeWindow>() {
@Override
public void process(Context context, Iterable<EventResponse> iterable, Collector<Object> collector) throws Exception {
--- proccessing logic
}
在这种情况下,当添加历史数据的第一个元素时, process() 不会立即开始处理。我的假设是```a)默认情况下,第一个事件将是第一个窗口的一部分,并且可以立即进行处理。b) 第二天的工作将从窗口中删除最后 29 天的数据。我的假设对那段代码是否正确?感谢您对此的帮助。