我目前想知道如何处理Apache Flink流应用程序中的应用程序错误。一般来说,我看到两种情况:
- 暂时性错误,您希望重播输入数据,并且处理可能会在第二次尝试时成功。例如,对暂时不可用的外部服务的依赖 。
- 永久性错误,重复处理仍将失败;例如无效的输入数据。
对于第一种情况,看起来常见的解决方案是抛出一些异常。或者有没有更好的方法,例如一种特殊的异常,以实现更有效的处理,例如来自 Apache Storm Trident 的FailedException
(请参阅 Storm Trident 拓扑中的错误处理)。
对于永久性错误,我无法在网上找到任何信息。例如,map()
操作总是必须返回一些东西,这样就不能像在 Trident 中那样静默地丢弃消息。
有哪些可用的 API 或最佳实践?感谢您的帮助。
自从这个问题被问到以来,已经有一些发展:
这个讨论是为什么侧输出应该有帮助的背景,关键摘录:
侧面输出(又名多路输出)是高度要求的功能之一在高保真流处理用例中。有了这个功能,Flink能
- 端输出损坏输入数据,避免作业陷入"失效->重启->失效"循环
- 侧输出稀疏接收延迟到达事件,同时在窗口计算中发出激进的水印。
这导致了 jira:FLINK-4460,该版本已在 Flink 1.1.3 及更高版本中解决。
<小时 />我希望这有所帮助,如果需要更通用的解决方案,请考虑一下您的用例并考虑为其创建 jira。