package kgc.kb11.beans;
import java.util.ArrayList;
public class SensorReading {
private String id;
private Long timestamp;
private Double temperature;
@Override
public String toString() {
return "SensorReading{" +
"id='" + id + '\'' +
", timestamp=" + timestamp +
", temperature=" + temperature +
'}';
}
public SensorReading(String id, Long timestamp, Double temperature) {
this.id = id;
this.timestamp = timestamp;
this.temperature = temperature;
}
public SensorReading() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Long getTimestamp() {
return timestamp;
}
public void setTimestamp(Long timestamp) {
this.timestamp = timestamp;
}
public Double getTemperature() {
return temperature;
}
public void setTemperature(Double temperature) {
this.temperature = temperature;
}
}
package kgc.kb11.process;
import kgc.kb11.beans.SensorReading;
import org.apache.flink.api.java.tuple.Tuple;
import org.apache.flink.configuration.Configuration;
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.KeyedProcessFunction;
import org.apache.flink.streaming.api.functions.ProcessFunction;
import org.apache.flink.util.Collector;
public class Process1_KeyProcessFunction {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env =
StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
DataStreamSource<String> inputStream =
env.socketTextStream("192.168.119.125", 7777);
SingleOutputStreamOperator<SensorReading> dataStream = inputStream.map(line -> {
String[] split = line.split(",");
SensorReading sensorReading =
new SensorReading(split[0], Long.parseLong(split[1]), Double.parseDouble(split[2]));
return sensorReading;
});
dataStream.keyBy("id").process(new MyKeyProcessFunction()).print();
env.execute("mykeyprocess");
}
private static class MyKeyProcessFunction extends KeyedProcessFunction<Tuple,SensorReading,Integer> {
@Override
public void open(Configuration parameters) throws Exception {
super.open(parameters);
}
@Override
public void close() throws Exception {
super.close();
}
@Override
public void processElement(SensorReading value, Context ctx, Collector<Integer> out) throws Exception {
Tuple currentKey = ctx.getCurrentKey();
Long timestamp = ctx.timestamp();
long l = ctx.timerService().currentProcessingTime();
ctx.timerService().registerProcessingTimeTimer(
ctx.timerService().currentProcessingTime()+10000L
);
out.collect(value.toString().length());
}
@Override
public void onTimer(long timestamp, OnTimerContext ctx, Collector<Integer> out) throws Exception {
System.out.println(timestamp+" 定时器触发");
}
}
}