栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

flink last window

flink last window

问题:由于数据不连续,导致某个时间段最后一个窗口一直不会触发,一直等到新数据流入才会触发。
解决:通过重写WatermarkStrategy方法进行控制。
思路:每来一条新数据时会触发一次onEvent方法,如无参数控制,onPeriodicEmit会周期性触发。所以可以通过判断最后一条新数据进来的时间与系统时间做比较,一旦x秒数据数据没有进来则触发新的watermark逻辑;

    public static class watermarkCust implements WatermarkStrategy{

        private Tuple2 state = Tuple2.of(0L,true);

        @Override
        public WatermarkGenerator createWatermarkGenerator(WatermarkGeneratorSupplier.Context context) {
            return new WatermarkGenerator() {
                private long maxWatermark;
                private long dexl = 3000L;
                @Override
                public void onEvent(Order waterSensor, long l, WatermarkOutput watermarkOutput) {
                    maxWatermark = Math.max(maxWatermark,waterSensor.getAmount());
                    state.f0 = System.currentTimeMillis();
                    state.f1 = false;
                }
                @Override
                public void onPeriodicEmit(WatermarkOutput watermarkOutput) {
                    if (maxWatermark - dexl <=0){
                    } else {
                        if (System.currentTimeMillis() - state.f0 >= 20000L && state.f1 == false){
                            watermarkOutput.emitWatermark(new Watermark(maxWatermark - dexl + 10000L));
                            state.f1 = true;
                            System.out.println("触发窗口");
                        } else {
                            watermarkOutput.emitWatermark(new Watermark(maxWatermark - dexl));
                        }
                    }
                }
            };
        }
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/680978.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号