flink中流式计算主要是针对各种流,做各种transform的operator,了解flink中总共有哪些流,能让我们实现需求时更得心应手。
1.DataStream
常规数据流,最常见的流类型,代表流中的元素都是同一类型,其他类型的流都是在此基础上做叠加了各种特性
2.KeyedStream
分区流,代表流中的元素都将被提供的分区字段进行分区处理,然后再进入下一个算子进行计算
有多少个分区取决于下一个算子的并行度,下一个算子并行度为9,则分区总数为9
3.WindowedStream
分区窗口流,由分区流根据分窗器将分区流中的元素分到零个或一个或多个窗口中,在根据触发器触发窗口流计算窗口中的数据
关键词:分窗器(WindowAssigner),触发器(Trigger)
4.AllWindowedStream
统一窗口流,由常规数据流结合分窗器形成,计算由触发器触发。
与分区窗口流的区别是,是否分区
5.ConnectedStreams
连接流,表示两个流的合并,类似于join吧,个人理解,只是元素类型可能不一样。官网例子:
DataStream<Integer>someStream=//...
DataStream<String>otherStream=//...
ConnectedStreams<Integer,String>connectedStreams=someStream.connect(otherStream);
6.SplitStream
分割流,可以通过对父流中的元素设置规则,将父流分割成多个子流
6.1.规则设置
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
迭代流,对算法更新模型很有用的流。用法也很简单,从流中过滤掉一些元素重新作为输入进行计算,所以要注意不停的作为输入重复计算。
以上就是flink的所有流汇总,以及他们的一些特性。有什么问题及交流,就在下方流言吧