如果我在flink运算符中抛出运行时异常,将如何处理?
我只想忽略此异常并继续处理流,但是如果我忽略它们,我不知道副作用。此异常会停止整个数据流吗?
答案 0 :(得分:1)
如果您的一位操作员将引发异常,则整个作业将失败。与普通应用程序没有太大区别:如果任何人都未处理异常,则应用程序将失败。
这样想:如果您不知道如何处理某种情况,则会引发异常-这某种程度上表明,打电话给我的人都应注意这一点。至少我不知道如何告诉Flink:请忽略我的例外情况。
我的建议:在您的运营商内部处理异常。这可能意味着您必须更改运算符的类型(或至少要更改返回类型)。
例如
case class MyMapper() extends MapFunction[Double, Double] {
override def map(in : Double) : Double {
try {
1/in
}
catch {
case e : java.lang.ArithmeticException:
throw new RuntimeException(e)
}
}
}
可能会变成FlatMap运算符,仅不返回任何内容。或者,您可以更改此运算符的返回类型,以返回Double而不是Double的Option。
希望有帮助