Flink为流处理和批处理分别提供了DataStream API和DataSet API。在开发工作中这些API极大的便利了开发者开发大数据应用。DataStream 在经过Transformation之后,会随之生成相应的数据流类型。比如:KeyedStream,JoinedStreams,CoGroupedStreams等等。但这些数据流类型之间是如何通过转换联系在一起的?。下文☞☞☞☞☞
流之间转换
DataStream
DataStream 是Flink 流处理API中最核心的数据结构。他代表了一个运行在多个分区上的并行流。一个DataStream可以从StreamExecutionEnvironment 通过env.addSource(SourceFunction)获得,可以但是不限于这一种方式。
DataStream上的转换操作都是逐条的,比如map(),flatMap(),filter()。DataStream 也可以执行rebalance(再平衡,用来减轻数据倾斜) 和broadcaseted(广播)等分区转换。
val stream: DataStream[MyType] = env.addSource(new FlinkKafkaConsumer011[String](...)).setParallelism(3)
val str1: DataStream[(String, MyType)] = stream.flatMap { ... }
val str2: DataStream[(String, MyType)] = stream.rebalance()
val str3: DataStream[AnotherType] = stream.map { ... }
上面给出的DataStream代码块在运行时会转换成如下执行图: