1 import org.apache.flink.api.common.functions.MapFunction;
2 import org.apache.flink.streaming.api.TimeCharacteristic;
3 import org.apache.flink.streaming.api.datastream.DataStreamSource;
4 import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
5 import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
6 import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor;
7 import org.apache.flink.streaming.api.windowing.time.Time;
8
9 public class Flink_Watermark_Test {
10 public static void main(String[] args) {
11 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
12 env.setParallelism(1);
13 //时间语义:EvenTime
14 env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
15 //套接字
16 DataStreamSource<String> stream = env.socketTextStream("hadoop106", 9999);
17 //封装成传感器对象
18 SingleOutputStreamOperator<Sensor> map = stream.map(new MapFunction<String, Sensor>() {
19 @Override
20 public Sensor map(String s) throws Exception {
21 String[] split = s.split(",");
22 return new Sensor(split[0], Long.valueOf(split[1]), Double.valueOf(split[2]));
23 }
24 });
25 //水位线允许3s延迟
26 SingleOutputStreamOperator<Sensor> datas = map.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor<Sensor>(Time.seconds(3)) {
27 @Override
28 public long extractTimestamp(Sensor sen) {
29 return sen.getSensor_timeStamp() ;
30 }
31 });
32 //滑动窗口 大小 10s 步长 5s 输出结果
33 datas.keyBy("sensor_id").timeWindow(Time.seconds(10),Time.seconds(5)).sum("sensor_Temp").print();
34
35 try {
36 env.execute();
37 } catch (Exception e) {
38 e.printStackTrace();
39 }
40 }
41 }