flink中流式計(jì)算主要是針對各種流,做各種transform的operator,了解flink中總共有哪些流,能讓我們實(shí)現(xiàn)需求時(shí)更得心應(yīng)手。
1.DataStream
? ? 常規(guī)數(shù)據(jù)流,最常見的流類型,代表流中的元素都是同一類型,其他類型的流都是在此基礎(chǔ)上做疊加了各種特性
2.KeyedStream
? ? 分區(qū)流,代表流中的元素都將被提供的分區(qū)字段進(jìn)行分區(qū)處理,然后再進(jìn)入下一個(gè)算子進(jìn)行計(jì)算
????有多少個(gè)分區(qū)取決于下一個(gè)算子的并行度,下一個(gè)算子并行度為9,則分區(qū)總數(shù)為9
3.WindowedStream
? ? 分區(qū)窗口流,由分區(qū)流根據(jù)分窗器將分區(qū)流中的元素分到零個(gè)或一個(gè)或多個(gè)窗口中,在根據(jù)觸發(fā)器觸發(fā)窗口流計(jì)算窗口中的數(shù)據(jù)
? ? 關(guān)鍵詞:分窗器(WindowAssigner),觸發(fā)器(Trigger)
4.AllWindowedStream
? ? 統(tǒng)一窗口流,由常規(guī)數(shù)據(jù)流結(jié)合分窗器形成,計(jì)算由觸發(fā)器觸發(fā)。
? ? 與分區(qū)窗口流的區(qū)別是,是否分區(qū)
5.ConnectedStreams
? ? 連接流,表示兩個(gè)流的合并,類似于join吧,個(gè)人理解,只是元素類型可能不一樣。官網(wǎng)例子:
????DataStream<Integer>someStream=//...
????DataStream<String>otherStream=//...
????ConnectedStreams<Integer,String>connectedStreams=someStream.connect(otherStream);
6.SplitStream
? ? 分割流,可以通過對父流中的元素設(shè)置規(guī)則,將父流分割成多個(gè)子流
????6.1.規(guī)則設(shè)置
????????SplitStream<Integer>split=someDataStream.split(newOutputSelector<Integer>(){@OverridepublicIterable<String>select(Integervalue){List<String>output=newArrayList<String>();if(value%2==0){output.add("even");}else{output.add("odd");}returnoutput;}});
? ? 6.2分割
????SplitStream<Integer>split;
????DataStream<Integer>even=split.select("even");
????DataStream<Integer>odd=split.select("odd");
????DataStream<Integer>all=split.select("even","odd");
7.IterativeStream?
? ? 迭代流,對算法更新模型很有用的流。用法也很簡單,從流中過濾掉一些元素重新作為輸入進(jìn)行計(jì)算,所以要注意不停的作為輸入重復(fù)計(jì)算。
以上就是flink的所有流匯總,以及他們的一些特性。有什么問題及交流,就在下方流言吧