由于代码错误或缺乏验证,进入Flink作业的数据可能会触发异常。 我的目标是提供一种一致的异常处理方式,供我们的团队在Flink作业中使用,不会导致生产中的任何停机。
重启策略似乎不适用于:
“ keyBy”功能中的try / catch块不能完全起到以下作用:
示例代码:
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”出现问题的事件以及应该返回一个结果的类似方法。
答案 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");