我有一项工作,它将一些正则表达式应用于大量字符串。我通过创建一个以字符串列表和正则表达式列表为输入的交叉联接作业来实现这一点。
通常情况下,这运行得很好,但偶尔对于某个输入和正则表达式对,任务执行永远不会终止——主要是因为输入太大/正则表达式效率不高。
在这种情况下,我更希望任务"超时",或者整个作业"超时"这样我就知道出了问题并跳过处理。
我浏览了flink配置文档,但没能找到。
我做了一个变通方法,在任务中创建一个未来的异步线程,并在一定时间后取消它以应用regex,但这似乎有些过头了。因此,寻求更好的解决方案。
Flink中没有可以做你想做的事情的工作限制。由于这听起来非常面向批处理,我也不认为这是一个正在积极研究的功能
尽管如此,您的解决方案实际上已经相当不错了。其他解决方案取决于您的基础架构。如果你通过使用气流或任何其他工作流系统触发作业,我想他们可以在一段时间后取消任务。如果您在K8s或YARN上运行它,您可能能够限制总资源使用量。但如果你不使用任何一种,那么你的解决方案就是一个很好的安全保护。
还有一些想法:你真的需要慢速的javaRegex吗?或者你可以使用Re2或其他自动机库吗?你能在非常大的输入字符串上添加一些健全性检查并跳过它们吗?你能在时间用完后简单地停止应用CrossFunction
吗(优雅的终止(?