2 个回答
Flink 提供以下三种方式处理晚到数据:
1、允许延迟(Allowed Lateness):通过 allowedLateness 设置窗口关闭后的容忍时间,在此期间内的晚到数据仍会触发窗口重新计算。
1、允许延迟(Allowed Lateness):通过 allowedLateness 设置窗口关闭后的容忍时间,在此期间内的晚到数据仍会触发窗口重新计算。
.window(TumblingEventTimeWindows.of(Time.hours(1)))
.allowedLateness(Time.minutes(30)) // 允许窗口关闭后30分钟内接收晚到数据
.aggregate(...);
2、 侧输出(Side Output):将晚到数据重定向到侧输出流,避免主数据流污染,后续可单独处理(如补偿逻辑或日志记录)。// 定义侧输出标签
OutputTag<Event> lateDataTag = new OutputTag<>("late-data") {};
SingleOutputStreamOperator<Result> mainStream = input
.keyBy(...)
.window(...)
.allowedLateness(Time.minutes(10))
.sideOutputLateData(lateDataTag) // 将超时的晚到数据发送到侧输出
.aggregate(...);
// 获取侧输出流
DataStream<Event> lateStream = mainStream.getSideOutput(lateDataTag);
发布于:10小时前 IP属地:
3、直接丢弃(默认行为)
不配置 allowedLateness 和侧输出时,晚到数据直接丢弃。
发布于:10小时前 IP属地:
我来回答
您需要 登录 后回答此问题!