代码之家  ›  专栏  ›  技术社区  ›  xingbin

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

  •  0
  • xingbin  · 技术社区  · 5 年前

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

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

    0 回复  |  直到 5 年前
        1
  •  1
  •   TobiSH    5 年前

    如果某个操作员抛出异常,则整个作业将失败。它与普通应用程序没有太大区别:如果任何人都不处理异常,应用程序将失败。

    这样想:如果你不知道如何处理某个特定的情况,你就会抛出一个异常-这不知怎的表明无论谁打电话给我都应该处理这个问题。至少我不知道你怎么告诉弗林克:请忽略我的例外。

    我的建议是:在你的操作员中处理异常。这可能意味着您必须更改运算符的类型(或者至少更改返回类型)。

    例如。

    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选项。

    希望能帮上忙