flink侧输出流(SideOutput)

侧输出流

package api

import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.functions.ProcessFunction
import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time
import org.apache.flink.util.Collector

object sideOutut {
    
    
  def main(args: Array[String]): Unit = {
    
    
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(1)
    //设点时间类型 、还需要在datastream上指定时间戳和watermark
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
    //自动设定200毫秒
    //env.getConfig.setAutoWatermarkInterval(200L)
    val stream = env.socketTextStream("node02", 5515)
    val dataStream = stream.map(data => {
    
    
      val dataArray = data.split(",")
      SensorReading(dataArray(0).trim, dataArray(1).trim.toLong, dataArray(2).trim.toDouble)
    }
    )
      //      .assignAscendingTimestamps(_.timestamp * 1000) //有序的数据
      //            处理乱序数据
      //            自动生成
      .assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor[SensorReading](Time.milliseconds(1000)) {
    
     //3*1000为延迟
      override def extractTimestamp(t: SensorReading): Long = t.timestamp * 1000
    })

    val Dstream = dataStream
      .keyBy(_.id)
      .process(new sideProcess())
    Dstream.print()
    Dstream.getSideOutput(new OutputTag[String]("freezing")).print()
    env.execute()
  }
}

class sideProcess() extends ProcessFunction[SensorReading, SensorReading] {
    
    
	//todo  温度在设定之下时候输出到侧输出流报警
  lazy val alertOutput = new OutputTag[String]("freezing")

  override def processElement(value: SensorReading, ctx: ProcessFunction[SensorReading, SensorReading]#Context, out: Collector[SensorReading]) = {
    
    
    if (value.temperature < 32.0) {
    
    
      ctx.output(alertOutput, "freezing alert" + value.id)
    }
    else {
    
    
      out.collect(value)
    }
  }
}

猜你喜欢

转载自blog.csdn.net/weixin_44429965/article/details/108014518