当我使用countWindowBeforeWindowFunction时,在运行代码之后,我得到了一个错误,比如当前不支持状态迁移,detail msg是
org.apache.flink.util.FlinkRuntimeException: org.apache.flink.util.StateMigrationException: State migration is currently not supported.
at org.apache.flink.runtime.state.heap.HeapKeyedStateBackend.create(HeapKeyedStateBackend.java:216)
at org.apache.flink.streaming.api.operators.InternalTimeServiceManager.createTimerPriorityQueue(InternalTimeServiceManager.java:121)
at org.apache.flink.streaming.api.operators.InternalTimeServiceManager.registerOrGetTimerService(InternalTimeServiceManager.java:106)
at org.apache.flink.streaming.api.operators.InternalTimeServiceManager.getInternalTimerService(InternalTimeServiceManager.java:87)
at org.apache.flink.streaming.api.operators.AbstractStreamOperator.getInternalTimerService(AbstractStreamOperator.java:741)
at org.apache.flink.streaming.runtime.operators.windowing.WindowOperator.open(WindowOperator.java:225)
at org.apache.flink.streaming.runtime.operators.windowing.EvictingWindowOperator.open(EvictingWindowOperator.java:430)
at org.apache.flink.streaming.runtime.tasks.StreamTask.openAllOperators(StreamTask.java:424)
at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:290)
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:711)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.flink.util.StateMigrationException: State migration is currently not supported.
at org.apache.flink.util.StateMigrationException.notSupported(StateMigrationException.java:42)
... 11 more
我的生成器代码是
SingleOutputStreamOperator singleOutputStream = iotDataSource.flatMap(new String2MetricFlatMapFunctionWithOutTimeAlignment())
.filter(new WaterMarkFilterFunction(Time.seconds(WATERMARK_SIZE)))
.filter(new DataCleanFilterFunction())
.map(new RelateParkMapFunction())
.assignTimestampsAndWatermarks(new CommonBoundedOutOfOrdernessTimestampExtractor(Time.seconds(MAX_OUT_OF_ORDERNESS)))
.keyBy((KeySelector) metric -> metric.getPark())
.countWindow(10,1)
.apply(new RealTimeAlarmWindowApplyFunction(CACHE_SIZE))
.map(new ResultMapFunction())
.disableChaining();
可能是RealTimeAlarmWindowApplyFunction出错了,
public class RealTimeAlarmWindowApplyFunction extends RichWindowFunction {
private Logger logger = LoggerFactory.getLogger(RealTimeAlarmWindowApplyFunction.class);
private int cacheDataSize;
public RealTimeAlarmWindowApplyFunction(int cacheDataSize) {
this.cacheDataSize = cacheDataSize;
}
@Override
public void apply(String key, GlobalWindow window, Iterable<Metric> input, Collector<ResultAction> out) throws Exception {
//...
// process code with no error
//...
}
}