Apache flink 如何在Apache flink KeyedBroadCastProcessFunction中处理异常

Apache flink 如何在Apache flink KeyedBroadCastProcessFunction中处理异常,apache-flink,flink-streaming,flink-cep,flink-sql,Apache Flink,Flink Streaming,Flink Cep,Flink Sql,我是新来的Flink我正在使用Flink KeyedBroadCastProcessFunction进行模式评估一些类似于()的东西,我正在使用JAVA开发我的代码,但我不知道如何处理异常,如果在处理数据流时发生任何故障,我搜索了很多,但没有得到我在下面两个链接中结束 根据第一个链接,用户说他在processfn中使用sideoutput来捕获错误。我还在程序中使用sideoutput来发送与模式不匹配的数据,但我不知道如何处理错误和无效数据到同一个sideoutput 根据第二个链接,用户

我是新来的Flink我正在使用Flink KeyedBroadCastProcessFunction进行模式评估一些类似于()的东西,我正在使用JAVA开发我的代码,但我不知道如何处理异常,如果在处理数据流时发生任何故障,我搜索了很多,但没有得到我在下面两个链接中结束

根据第一个链接,用户说他在processfn中使用sideoutput来捕获错误。我还在程序中使用sideoutput来发送与模式不匹配的数据,但我不知道如何处理错误和无效数据到同一个sideoutput

根据第二个链接,用户正在尝试使用null key和printsink函数向keyby函数添加一个sink,但我完全不理解

有人能帮我做以下事情吗

1) 关于异常处理的任何文档或小代码段,我在flink文档网站上都找不到任何东西 2) flink异常处理的最佳实践


我在网上找不到任何有效的资源,如果有人能回答,这对其他人的进一步参考也很有用。

您可以从ProcessFunction中获得任意多的边输出,每个边输出都有自己独特的
OutputTag
。因此,您可以将一个用于不匹配的数据,另一个用于错误

final OutputTag unmatched=新的OutputTag(“unmatched data”){;
最终输出错误=新输出错误(“错误的侧输出”){};
SingleOutputStreamOperator matchedData=。。。;
DataStream unmatched=matchedData.getSideOutput(不匹配);
数据流错误=matchedData.getSideOutput(错误);
如果您最终使用几个不同的运算符,每个运算符都使用边输出来收集错误,那么您可以将它们合并在一起以进行报告,这可能看起来像这样:

final OutputTag errors=新的OutputTag(“侧输出”){};
SingleOutputStreamOperator task1=。。。;
SingleOutputStreamOperator task2=。。。;
SingleOutputStreamOperator task3=。。。;
DataStream exceptions1=task1.getSideOutput(错误);
DataStream exceptions2=task2.getSideOutput(错误);
DataStream exceptions3=task3.getSideOutput(错误);
数据流异常=异常1.union(异常2,异常3);
例外情况:addSink(新FlinkKafkaProducer(…);

谢谢你的回答,flink中是否有类似java try..catch等的任何约定类型的异常处理,特别是如何在运行时处理异常不,不是真的。不同的应用有不同的需求。例如,在某些情况下,让作业失败,等待一段时间,然后重试是有意义的。在其他情况下,可以忽略某些例外情况。