Flink入门第七课:Flink DataStaem Api的Window操作

1、TimeWindow 

package com.atguigu.Bwindow;

import com.atguigu.Fbeans.SensorReading;
import org.apache.commons.collections.IteratorUtils;
import org.apache.flink.api.common.functions.AggregateFunction;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.windowing.WindowFunction;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.streaming.api.windowing.windows.TimeWindow;
import org.apache.flink.util.Collector;

import javax.swing.text.html.HTMLDocument;

/**
 * window上可以安装netcat,安装好了之后通过cmd打开,输入“nc -l -p 7777”即可启动服务端发送消息
 * 本类正好监控该7777端口,每次nc服务端发送消息,本类都能够按key分类统计出现的次数
 *  消息类型:sensor_1,1547718199,35.8   sensor_6,1547718201,15.4
 *
 *    窗口分类:
 *          滑动滚动的区别在于滑动窗口步长不等于窗口长度,滚动则是等于。
 *          窗口大概分为时间和数量窗口,每一类又可以细分为滚动和滑动。
 *    时间窗口:每隔几秒统计最近几秒的数据。(用得多)。
 *      滑动时间窗口:
 *          keyBy("id").window(SlidingProcessingTimeWindows.of(Time.Seconds(10),Time.Seconds(5))).maxBy("id");  步长5
 *          简写:keyBy("id").timeWindow(Time.Seconds(10),Time.Seconds(5)).maxBy("id"); 步长5
 *      滚动时间窗口:
 *          keyBy("id").window(TumblingProcessingTimeWindows.of(Time.Seconds(5))).maxBy("id"); 窗口和步长都是5
 *          简写:keyBy("id").timeWindow(Time.Seconds(5)).maxBy("id"); 窗口和步长都是5
 *      session会话窗口:
 *          设置一个session间隔,如果两条消息间隔大于session间隔,则后一条信息加入新窗口并触发上一个窗口的计算。
 *          keyBy("id").window(ProcessingTimeSessionWindow.withGap(Time.Seconds(10))).maxBy("id");
 *          没有简写。还一个类DynamicProcessingTimeSessionWindow
 *    数量窗口:对于同key数据,每隔几个数据统计最近几个数据。(用得少)
 *          滑动数量窗口:
 *              keyBy("id").countWindow(5,3).maxBy("id")  最近5条消息,相同的key出现了三次的数据
 *          滑动数量窗口:
 *              keyBy("id"

你可能感兴趣的:(Flink从入门到精通,Flink,Window,aggregate,apply,process)