一、不分组SlidingWindow

        DataStream<String> lines = env.socketTextStream("192.168.87.130", 8888);
        SingleOutputStreamOperator<Integer> word = lines.flatMap(new FlatMapFunction<String, Integer>() {
            private static final long serialVersionUID = 1L;

            @Override
            public void flatMap(String value, Collector<Integer> out)
                    throws Exception {
                out.collect(Integer.parseInt(value));
            }
        });
        //不分组,整体当成一个组
        AllWindowedStream<Integer, TimeWindow> windowStream = word.timeWindowAll(Time.seconds(10), Time.seconds(5));
        SingleOutputStreamOperator<Integer> summed = windowStream.sum(0);
        summed.print();

输入:1,2,3

输出

2>3

3>6

4>3

  二、SlidingWindow(先分组,再滑动)

        DataStream<String> lines = env.socketTextStream("192.168.87.130", 8888);
        SingleOutputStreamOperator<Tuple2<String, Integer>> word = lines.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
            private static final long serialVersionUID = 7179469626039725354L;

            @Override
            public void flatMap(String value,
                    Collector<Tuple2<String, Integer>> out) throws Exception {
                String[] splitStr = value.split(",");
                out.collect(Tuple2.of(splitStr[0], Integer.parseInt(splitStr[1])));
            }
        });
        //先分组,再划分窗口
        KeyedStream<Tuple2<String, Integer>, Tuple> keyed = word.keyBy(0);
        WindowedStream<Tuple2<String, Integer>, Tuple, TimeWindow>  windowStream = keyed.timeWindow(Time.seconds(10), Time.seconds(5));
        SingleOutputStreamOperator<Tuple2<String,Integer>> summed = windowStream.sum(1);
        summed.print();

 三、SessionWindow基本使用

        DataStream<String> lines = env.socketTextStream("192.168.87.130", 8888);
        SingleOutputStreamOperator<Integer> word = lines.flatMap(new FlatMapFunction<String, Integer>() {
            private static final long serialVersionUID = 1L;

            @Override
            public void flatMap(String value, Collector<Integer> out)
                    throws Exception {
                out.collect(Integer.parseInt(value));
            }
        });
        //不分组,整体当成一个组
        AllWindowedStream<Integer, TimeWindow> windowStream = word.windowAll(ProcessingTimeSessionWindows.withGap(Time.seconds(5)));
        SingleOutputStreamOperator<Integer> summed = windowStream.sum(0);
        summed.print();

设置5s没输入后划分一个窗口

 四、EventTime和SessionWindow

        //设置EventTime作为时间标准
        env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
        
        //timestamp,flink,2
        //timestamp,sprak,3
        DataStream<String> lines = env.socketTextStream("192.168.87.130", 8888)
                .assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor<String>(Time.seconds(0)) {
                    private static final long serialVersionUID = -4441231666252017557L;
                    //将数据中的时间字段提取出来,然后转成long类型
                    @Override
                    public long extractTimestamp(String element) {
                        String[] time = element.split(",");
                        return Long.parseLong(time[0]);
                    }
                    
                });
        SingleOutputStreamOperator<Tuple2<String, Integer>> word = lines.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
            private static final long serialVersionUID = 7179469626039725354L;
            @Override
            public void flatMap(String value,
                    Collector<Tuple2<String, Integer>> out) throws Exception {
                String[] splitStr = value.split(",");
                out.collect(Tuple2.of(splitStr[1], Integer.parseInt(splitStr[2])));
            }
        });
        //先分组,再划分窗口
        KeyedStream<Tuple2<String, Integer>, Tuple> keyed = word.keyBy(0);
        WindowedStream<Tuple2<String, Integer>, Tuple, TimeWindow>  windowStream = keyed.window(EventTimeSessionWindows.withGap(Time.seconds(5)));
        SingleOutputStreamOperator<Tuple2<String,Integer>> summed = windowStream.sum(1);
        summed.print();

输入:

1000,flink,2
2000,flink,1
6100,flink,3
7000,flink,4
99999999,flink,5

输出:

4> (flink,10)

第一列的时间间隔超过5s后划分一个窗口