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

7
我目前在思考如何处理Apache Flink流应用程序中的应用程序错误。一般来说,我看到两种情况:
1.瞬态错误,您希望重新播放输入数据,并且第二次尝试可能会成功处理。例如,对外部服务的依赖暂时不可用。
2.永久性错误,重复处理仍将失败;例如无效的输入数据。
对于第一种情况,似乎常见的解决方案是抛出一些异常。或者是否有更好的方法,例如特殊类型的异常以进行更有效的处理,例如Apache Storm Trident中的FailedException(请参见{{link1:Storm Trident拓扑中的错误处理}})?
对于永久性错误,我找不到任何在线信息。例如,map()操作始终必须返回某些内容,因此不能像在Trident中那样静默地删除消息。
有哪些可用的API或最佳实践?感谢您的帮助。

1个回答

1
自此问题被提出以来,已经有了一些进展:
这个讨论介绍了为什么侧向输出应该有助于的背景,其关键摘录如下:

侧向输出(又称多输出)是高保真流处理用例中最受欢迎的功能之一。有了这个功能,Flink 可以:

  • 侧向输出损坏的输入数据,并避免作业陷入“失败 -> 重启 -> 失败”循环。
  • 在窗口计算中发出积极的水印时,侧向输出稀疏接收的迟到事件。
这导致了 jira:FLINK-4460,它已在 Flink 1.1.3 及以上版本中解决。

我希望这可以帮到您,如果需要一种更通用的解决方案,请考虑一下您的使用情况并创建一个jira。


1
我必须承认,自从我写Flink引用并思考这个问题以来已经有一段时间了。从我的印象来看,侧向输出确实看起来很有用。然而,它们仅适用于通用的ProcessFunction及其相关类。对于简单的Map,似乎仍然没有好的错误处理方式。 - F30

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接