apache-flink - 如果 source/sink/operator 具有未定义的 uid 或名称,则 Flink 作业失败
问题描述
在我的工作中,我希望每个源/接收器/操作员都应该uid
定义name
属性以便于识别。
operator.process(myFunction).uid(MY_FUNCTION).name(MY_FUNCTION);
现在我需要手动检查每个作业以检测缺失的设置。name
如果有或uid
未定义,我如何告诉 Flink 失败?
解决方案
一旦你得到一个StreamExecutionEnvironment
,你就可以得到运营商的图表。
当你没有定义一个名字时,Flink 会自动为你生成一个。此外,如果您设置了名称,至少在源或接收器的情况下,Flink 会在名称中添加前缀Source:
或Sink:
。
当不定义uid时,这个阶段图中的uid值为null。
鉴于您的场景,名称和 uid 始终相同,要检查所有操作员是否已提供名称和 uid,您可以执行以下操作:
getExecutionEnvironment().getStreamGraph().getStreamNodes().stream()
.filter(streamNode -> streamNode.getTransformationUID() == null ||
!streamNode.getOperatorName().contains(streamNode.getTransformationUID()))
.forEach(System.out::println);
此代码段将打印所有与您的规则不匹配的运算符。
这在 100% 的情况下不起作用,例如使用作为名称子字符串的 uid。但是您可以在此处获得访问运营商信息并应用适合您的情况的过滤器并执行您自己的策略的通用方法。
该片段可以用作 CI 的一部分,也可以直接在应用程序中使用。
推荐阅读
- docker - 使用来自主机的 socks5 代理进行 docker build
- sql - 从字符串转换日期和/或时间时转换失败。Sql
- django - 部署时使用 django admin 上传照片时如何修复权限错误?
- c# - 在没有冗余 CancellationTokenSource 的情况下链接两个 CancellationToken
- gcc - C 宏不在宏内展开
- node.js - Cors - Firebase 云功能中的访问控制允许来源错误
- c++ - C/C++ 宏从类型定义中定义类型
- java - 使用 Criteria API 获取并发表
- dataset - 为数据重组创建日期索引
- verilog - 为什么 $display 函数不打印任何值?