Wait the light to fall

实验特性

焉知非鱼

Experimental Features

实验特性 #

本节介绍 DataStream API 中的实验性功能。实验性功能仍在不断发展,可能是不稳定的、不完整的,或者在未来的版本中会有很大的变化。

将预先分割的数据流重新解释为 keyed 流 #

我们可以将一个预分区的数据流重新解释为一个 keyed 流,以避免洗牌。

警告:重新解释的数据流必须已经被预分区了,其方式与 Flink 的 keyBy 在洗牌中对数据的分区方式完全相同,即键组分配。

一个用例是两个作业之间的物化洗牌:第一个作业执行 keyBy 洗牌,并将每个输出物化为一个分区。第二个作业有源,对于每个并行实例,从第一个作业创建的相应分区中读取。现在可以将这些源重新解释为 keyed 流,例如应用窗口化。请注意,这个技巧使得第二个作业的并行性很尴尬,这对细粒度的恢复方案很有帮助。

这个重新解释的功能是通过 DataStreamUtils 暴露的。

static <T, K> KeyedStream<T, K> reinterpretAsKeyedStream(
    DataStream<T> stream,
    KeySelector<T, K> keySelector,
    TypeInformation<K> typeInfo)

给定一个基流(base stream)、一个键选择器和类型信息,该方法从基流创建一个 keyed 流。

代码示例:

val env = StreamExecutionEnvironment.getExecutionEnvironment
env.setParallelism(1)
val source = ...
new DataStreamUtils(source).reinterpretAsKeyedStream((in) => in)
  .timeWindow(Time.seconds(1))
  .reduce((a, b) => a + b)
  .addSink(new DiscardingSink[Int])
env.execute()

原文链接: https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/stream/experimental.html