Error handling ApacheFlink中的异常处理;keyBy";
可能由于代码中的错误或缺乏验证,进入Flink作业的数据会触发异常。 我的目标是提供一致的异常处理方式,我们的团队可以在Flink作业中使用这种方式,而不会在生产中造成任何停机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
- 简单的重启并不能解决问题,我们陷入了重启循环
- 我们不能简单地跳过这个事件
- 它们可以用于OOME或一些暂时性问题
- 我们不能添加自定义的
- 处理异常后,无法跳过“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
失败,继续下去就没有意义了