将 flink uid 命名为运算符的最佳实践

best practice of naming flink uid to operator

是否有为运算符命名 UID 的最佳做法? 可以像

这样简单的东西吗
stream.flatMap(new FlatMapFunc).uid("1")
    .assignTimestampsAndWatermarks(new TimestampExtractor).uid("2")
    .keyBy(r => r.key )
    .timeWindow(Time.minutes(10))
    .allowedLateness(Time.minutes(30))
    .process(new ProcessFunc).uid("3")

或者有一些rules/recommendations命名uid的?

AFAIK,您可以使用任何字符串作为 UID,只要它(显然)对于您的工作流程是唯一的。但我认为,展望未来,Flink 将提供对保存点数据的更好访问,其中包括 UID。因此,您可能希望使用更具描述性的名称,可能与数字结合使用以帮助确保唯一性。

UID 没有命名约定,但在我们的团队中,我们使用与 operator.name() 中使用的相同的值。 name值用于在Flink中渲染算子框UI

我这样我们就有了这样的代码,它对我们来说是语义简单的:

        streamExecutionEnvironment
        .addSource(new KafkaConsumer(kafkaConsumerOptions))
        .name("Kafka topic reader").uid("Kafka topic reader")
        .filter(new CreatedBy("my uncle"))
        .name("Created by my uncle filter").uid("Created by my uncle filter")
        .map(new ToInvoice())
        .name("To invoice mapper").uid("To invoice mapper")

每个 uid 必须是唯一的,否则作业提交将失败,因此定义格式样式很有帮助。 Flink docs 详细了解 uid 命名的重要性。它还建议将 .name.uid 一起使用,以便为日志记录和指标指定一个运算符。

一种可能的样式是使用内插字符串为每个运算符制作一个唯一的 uid 有很好的命名规范..

例子:

如果运算符是将电子邮件地址更改为域的映射函数,并且源事件来自名为 emailEvents

的 kafka 主题

mapEmailAddressToDomain($emailEvents)