flink的側輸出流

2021-10-10 06:41:04 字數 1198 閱讀 6960

在 flink 處理資料流時,我們經常會遇到這樣的情況:在處理乙個資料來源時,往往需要將該源中的不同型別的資料做分割處理,如果使用 filter 運算元對資料來源進行篩選分割的話,勢必會造成資料流的多次複製,造成不必要的效能浪費;flink 中的側輸出就是將資料流進行分割,而不對流進行複製的一種分流機制。flink 的側輸出的另乙個作用就是對延時遲到的資料進行處理,這樣就可以不必丟棄遲到的資料。

/**

* 把呼叫成功的stream(主流)和不成功的stream(側流)分別輸出。

*/object testsideoutputstream )

val mainstream: datastream[stationlog] = data.process(new createsideoutputstream(notsuccesstag))

//得到側流

val sideoutput: datastream[stationlog] = mainstream.getsideoutput(notsuccesstag)

mainstream.print("main") sideoutput.print("sideoutput")

streamenv.execute()

}class createsideoutputstream(tag: outputtag[stationlog]) extends processfunction[stationlog,stationlog]else}}

}源資料的格式

station_8,18600007699,18900003716,barring,1577080459130,0

station_0,18600003502,18900009859,fail,1577080459130,0

station_0,18600003502,18900009859,success,1577080468130,0

station_8,18600007699,18900003716,barring,1577080459130,0

station_0,18600003502,18900009859,fail,1577080459130,0

station_0,18600003502,18900009859,success,1577080468130,0

station_5,18600003713,18900000824,busy,1577080457129,0

Flink側輸出流(Side Output)

需求 如果溫度值小於32f,就將報警資訊輸出到側輸出流中 package com.run.wc import org.apache.flink.streaming.api.scala.import org.apache.flink.api.scala.import org.apache.flink....

Flink 側輸出流(SideOutput)

要求 將小於32 輸入到側輸入流,大於32 輸入到主流 import org.apache.flink.api.scala.import org.apache.flink.streaming.api.timecharacteristic import org.apache.flink.streami...

Flink 側輸出流 SideOutput

大部分的 datastream api 的運算元的輸出是單一輸出,也就是某種資料型別的流。除了 split 運算元,可以將一條流分成多條流,這些流的資料型別也都相同。processfunction 的 side outputs 功能可以產生多條流,並且這些流的資料型別可以不一樣。乙個 sideout...