Error handling ApacheFlink中的异常处理;keyBy";

Error handling ApacheFlink中的异常处理;keyBy";,error-handling,apache-flink,event-stream-processing,Error Handling,Apache Flink,Event Stream Processing,可能由于代码中的错误或缺乏验证,进入Flink作业的数据会触发异常。 我的目标是提供一致的异常处理方式,我们的团队可以在Flink作业中使用这种方式,而不会在生产中造成任何停机 重启策略在这里似乎不适用,因为: 简单的重启并不能解决问题,我们陷入了重启循环 我们不能简单地跳过这个事件 它们可以用于OOME或一些暂时性问题 我们不能添加自定义的 “keyBy”功能中的try/catch块没有完全帮助,因为: 处理异常后,无法跳过“keyBy”中的事件 示例代码: env.addSource

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

  • 重启策略在这里似乎不适用,因为:

    • 简单的重启并不能解决问题,我们陷入了重启循环
    • 我们不能简单地跳过这个事件
    • 它们可以用于OOME或一些暂时性问题
    • 我们不能添加自定义的
  • “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");
    
    env.addSource(kafkaConsumer)
    .keyBy(keySelector)//必须为一个条目返回一个结果
    .flatMap(mapFunction)//如果出现错误,我们可以跳过这里的一些条目
    .addSink(新的PrintSinkFunction());
    环境执行(“Flink应用程序”);
    

    我希望能够跳过“keyBy”和类似方法中导致问题的事件的处理,这些方法应该只返回一个结果。

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

    除了@phanhuy152的建议(我觉得这完全合法)之外,为什么不在
    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");
    
    env.addSource(kafkaConsumer)
    .filter(无效密钥)
    .keyBy(keySelector)//必须为一个条目返回一个结果
    .flatMap(mapFunction)//如果出现错误,我们可以跳过这里的一些条目
    .addSink(新的PrintSinkFunction());
    环境执行(“Flink应用程序”);
    
    null方法存在两个问题。1.它无法传递任何其他上下文和错误消息。2.在
    flatMap
    中,您需要有特殊的代码来处理这种情况,但是如果
    keyBy
    失败,继续下去就没有意义了