如果在Apache Flink中使用广播流,发现水印似乎不进行传递,并且在窗口操作中没有触发计算。这可能是由于水印无法传递到广播流的分区中,从而导致分区未触发窗口操作。要解决此问题,可以使用如下代码示例中的“withBroadcastSet”函数将广播变量添加到处理函数中:
BroadcastStream
然后,在处理函数中可以根据需要访问广播变量,例如:
public static class MyWindowFunction extends RichWindowFunction<..., ...> {
private List broadcastList;
@Override
public void open(Configuration parameters) throws Exception {
broadcastList = getRuntimeContext().getBroadcastVariable("broadcastName");
}
@Override
public void apply(...) throws Exception {
// use broadcastList as needed
}
}
通过以上方法,广播流就可以正常传递水印和触发窗口操作了。