Apache Flink-“ keyBy”中的异常处理

时间:2019-04-02 07:12:26

标签: error-handling apache-flink event-stream-processing

由于代码错误或缺乏验证,进入Flink作业的数据可能会触发异常。 我的目标是提供一种一致的异常处理方式,供我们的团队在Flink作业中使用,不会导致生产中的任何停机。

  1. 重启策略似乎不适用于:

    • 简单的重启无法解决问题,我们陷入了重启循环
    • 我们不能简单地跳过事件
    • 它们可以解决OOME或某些暂时性问题
    • 我们无法添加自定义标签
  2. “ keyBy”功能中的try / catch块不能完全起到以下作用:

    • 处理异常后,无法跳过“ keyBy”中的事件

示例代码:

env.addSource(kafkaConsumer)
    .keyBy(keySelector) // must return one result for one entry
    .flatMap(mapFunction) // we can skip some entries here in case of errors
    .addSink(new PrintSinkFunction<>());
env.execute("Flink Application");

我希望能够跳过处理导致“ keyBy”出现问题的事件以及应该返回一个结果的类似方法。

2 个答案:

答案 0 :(得分:1)

您可以为keyBy保留一个特殊值,例如“ NULL”以在这种情况下返回吗?那么您的flatMap函数在遇到这样的值时可以跳过吗?

答案 1 :(得分:1)

除了@ phanhuy152的建议(对我来说似乎完全合法),为什么不在filter之前keyBy

env.addSource(kafkaConsumer)
    .filter(invalidKeys)
    .keyBy(keySelector) // must return one result for one entry
    .flatMap(mapFunction) // we can skip some entries here in case of errors
    .addSink(new PrintSinkFunction<>());
env.execute("Flink Application");