命名 Flink 操作符

Naming Flink Operators

我正在使用 Flink v.1.4.0

我希望能够在 Flink UI 中命名运算符。我知道要这样做我只需要在 DataSetDataStream 上使用 .name() 方法。例如,像这样:

DataSet<SomePojo> flinkDataSet = ...;

flinkDataSet
    .map(new SomeTransformation())
    .name("Transformation A");

我想知道的是,究竟是什么定义了运算符?它是 DataSet's/DataStream 的密钥吗?或者元素类型?我知道如果我应用 MapFunction 与应用该函数的元素具有相同 return 类型的运算符将保持不变,但我注意到如果我应用 [= 运算符通常会发生变化18=] 或 KeyByGroupBy 操作,以及应用当然的操作。

我问这个的原因是因为我想了解 Flink DAG 在 Flink UI 中的粒度有多细,例如我可以说出每一个转变吗?或者运算符是由正在处理的 DataSet/DataStream 的类型定义的,因此我只能命名它们?例如,这行得通吗?

flinkDataSet
    .map(new SomeTransformation())
    .name("Transformation A")
    .map(new SomeOtherTransformation())
    .name("Transformation B");

或者名字会被第二个覆盖吗?我当然可以试验并找出答案,但我也想了解原因。

就我使用的 name() 函数而言,您可以使用数据流或数据集 API 进行的每个转换都是一个操作,因此在您的第二种情况下,图形将如下所示

"Transformation A" -------> "Transformation B"

但是在 Flink dashborad 上,可以将这些任务分组到同一个任务中,如下所示:

-----------------------         -----------------------
| SOURCE              |  --->   |"Transformation A" ->| ---> More operations
-----------------------         |"Transformation B"   |
                                -----------------------

是的,您可以为每个转换命名。但正如@diegoreico 指出的那样,如果运算符是流水线式的,那么 Flink UI 将把它们分组到 DAG 中的单个框(节点)中。