如何在flink运算符中正确处理异常?

时间:2019-03-15 02:20:12

标签: apache-flink

如果我在flink运算符中抛出运行时异常,将如何处理?

我只想忽略此异常并继续处理流,但是如果我忽略它们,我不知道副作用。此异常会停止整个数据流吗?

1 个答案:

答案 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。

希望有帮助