|
@@ -25,7 +25,7 @@ object IOTApp {
|
|
|
env.setParallelism(1)
|
|
|
|
|
|
/* 设置时间语义 */
|
|
|
- env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
|
|
|
+ env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)
|
|
|
|
|
|
val inputStream: DataStream[String] =
|
|
|
env.addSource( new FlinkKafkaConsumer[String](KafkaUtil.topic, new SimpleStringSchema(), KafkaUtil.kafkaConsumerProperties()) )
|
|
@@ -45,41 +45,40 @@ object IOTApp {
|
|
|
/* 转化为实体类流 */
|
|
|
val iotFilterDataStream: DataStream[IOTData] = filterStream.flatMap(new SplitData)
|
|
|
|
|
|
- /** -------------- ---------- 处理原始数据 start ----------------------- */
|
|
|
+ val waterStream: DataStream[IOTData] = iotFilterDataStream
|
|
|
+ /* 设置水位时间 */
|
|
|
+ .assignAscendingTimestamps(_.eventTime - 1)
|
|
|
+
|
|
|
+ /** ------------------------ 处理原始数据 start ----------------------- */
|
|
|
|
|
|
- iotFilterDataStream.keyBy(_.rowKey)
|
|
|
+ val keyedStream: DataStream[IOTData] = waterStream.keyBy(_.rowKey)
|
|
|
.process(new OriginalDataAlarm)
|
|
|
- iotFilterDataStream.addSink(new IOTOriginalSinkFunction)
|
|
|
+ keyedStream.getSideOutput(new OutputTag[IOTData]("late-data")).print("outputTag:")
|
|
|
+// keyedStream.addSink(new IOTOriginalSinkFunction)
|
|
|
|
|
|
/** ------------------------- 处理原始数据 end ------------------------- */
|
|
|
|
|
|
/** ------------------------ 处理分精度数据 start ------------------------ */
|
|
|
- val waterStream: DataStream[IOTData] = iotFilterDataStream
|
|
|
- /* 设置水位时间 */
|
|
|
- .assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor[IOTData](Time.minutes(30)) {
|
|
|
- override def extractTimestamp(element: IOTData) = {
|
|
|
- element.eventTime - 1
|
|
|
- }
|
|
|
- })
|
|
|
+
|
|
|
|
|
|
/* 定义侧输出流 */
|
|
|
- val sideOutputTag = new OutputTag[IOTData]("late-data")
|
|
|
-
|
|
|
- val windowsStream: DataStream[IOTData] = waterStream.keyBy(_.rowKey)
|
|
|
- .timeWindow(Time.minutes(15))
|
|
|
- /* 允许处理数据的最迟时间 */
|
|
|
- .allowedLateness(Time.minutes(60))
|
|
|
- /* 侧输出流 */
|
|
|
- .sideOutputLateData(sideOutputTag)
|
|
|
- .aggregate(new IOTAgg(), new IOTWindowResult())
|
|
|
+// val sideOutputTag = new OutputTag[IOTData]("late-data")
|
|
|
+//
|
|
|
+// val windowsStream: DataStream[IOTData] = waterStream.keyBy(_.rowKey)
|
|
|
+// .timeWindow(Time.minutes(15))
|
|
|
+// /* 允许处理数据的最迟时间 */
|
|
|
+// .allowedLateness(Time.minutes(60))
|
|
|
+// /* 侧输出流 */
|
|
|
+// .sideOutputLateData(sideOutputTag)
|
|
|
+// .aggregate(new IOTAgg(), new IOTWindowResult())
|
|
|
/** ------------------------ 处理分精度数据 end ------------------------ */
|
|
|
|
|
|
/* 设置要选取的事件时间 */
|
|
|
// val assignStream: DataStream[IOTData] = iotDataStream.assignAscendingTimestamps(_.eventTime)
|
|
|
|
|
|
/* 开窗数据保存hbase,侧输出流的数据查询hbase对比后再存入hbase */
|
|
|
- windowsStream.addSink(new IOTOriginalSinkFunction)
|
|
|
- windowsStream.getSideOutput(sideOutputTag).addSink(new IOTOriginalSinkFunction)
|
|
|
+// windowsStream.addSink(new IOTOriginalSinkFunction)
|
|
|
+// windowsStream.getSideOutput(sideOutputTag).addSink(new IOTOriginalSinkFunction)
|
|
|
|
|
|
env.execute("iot data collect")
|
|
|
}
|