如何处理Flink中的应用程序错误

时间:2016-04-28 10:26:10

标签: apache-flink flink-streaming

我目前想知道如何处理Apache Flink流应用程序中的应用程序错误。一般来说,我看到两种情况:

  1. 瞬态错误,您希望重放输入数据,第二次尝试可能会成功处理。一个例子是对外部服务的依赖,暂时不可用。
  2. 永久性错误,重复处理仍然会失败;例如无效的输入数据。
  3. 对于第一种情况,看起来常见的解决方案就是抛出一些异常。或者有更好的方法,例如一种特殊的异常,用于更有效的处理,例如来自Apache Storm Trident FailedException(参见Error handling in Storm Trident topologies)。

    对于永久性错误,我在网上找不到任何信息。例如,map()操作总是必须返回一些内容,这样就不能像在{em> Trident 中would一样静默地删除邮件。

    有哪些可用的API或最佳做法?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

自从提出这个问题以来,已有一些进展:

discussion具有why side outputs should help的背景,是密钥提取:

侧面输出(又称多输出)是高度要求的功能之一 在高保真流处理用例中。借助此功能,Flink 可以

  • 侧面输出损坏的输入数据,避免作业陷入“失败->重新启动->失败”周期
  • 在窗口计算中发出激进的水印时,侧面输出稀疏地接收到了迟到事件。

这导致jira:FLINK-4460在Flink 1.1.3及更高版本中已解决。


我希望这会有所帮助,如果需要更通用的解决方案,请仔细考虑您的用例,并考虑为其创建一个jira。