Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flink &引用;“缓冲池被破坏”;当我使用Flink SlidingEventTime窗口时_Apache Flink_Flink Streaming - Fatal编程技术网

Apache flink &引用;“缓冲池被破坏”;当我使用Flink SlidingEventTime窗口时

Apache flink &引用;“缓冲池被破坏”;当我使用Flink SlidingEventTime窗口时,apache-flink,flink-streaming,Apache Flink,Flink Streaming,当我使用“SlidingEventTimeWindows”时,Flink抛出“java.lang.IllegalStateException:缓冲池被破坏”,但当我更改为“SlidingProcessingTimeWindows”时,一切都正常 stacktrace如下所示: 18:37:53728警告org.apache.flink.streaming.api.operators.AbstractStreamOperator-发出延迟标记时出错。 java.lang.RuntimeExcep

当我使用“SlidingEventTimeWindows”时,Flink抛出“java.lang.IllegalStateException:缓冲池被破坏”,但当我更改为“SlidingProcessingTimeWindows”时,一切都正常

stacktrace如下所示:

18:37:53728警告org.apache.flink.streaming.api.operators.AbstractStreamOperator-发出延迟标记时出错。
java.lang.RuntimeException:缓冲池已销毁。
位于org.apache.flink.streaming.runtime.io.RecordWriterOutput.emitLatencyMarker(RecordWriterOutput.java:147)
位于org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.emitLatencyMarker(AbstractStreamOperator.java:683)
位于org.apache.flink.streaming.api.operators.StreamSource$LatencyMarksEmitter$1.onProcessingTime(StreamSource.java:151)
位于org.apache.flink.streaming.runtime.tasks.SystemProcessingTimeService$RepeatedTriggerTask.run(SystemProcessingTimeService.java:330)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
位于java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
运行(Thread.java:748)
原因:java.lang.IllegalStateException:缓冲池已销毁。
位于org.apache.flink.runtime.io.network.buffer.LocalBufferPool.requestMemorySegment(LocalBufferPool.java:230)
位于org.apache.flink.runtime.io.network.buffer.LocalBufferPool.RequestBufferBuilderBlock(LocalBufferPool.java:204)
位于org.apache.flink.runtime.io.network.api.writer.RecordWriter.requestNewBufferBuilder(RecordWriter.java:213)
位于org.apache.flink.runtime.io.network.api.writer.RecordWriter.sendToTarget(RecordWriter.java:144)
位于org.apache.flink.runtime.io.network.api.writer.RecordWriter.randomEmit(RecordWriter.java:125)
位于org.apache.flink.streaming.runtime.io.StreamRecordWriter.randomeit(StreamRecordWriter.java:93)
位于org.apache.flink.streaming.runtime.io.RecordWriterOutput.emitLatencyMarker(RecordWriterOutput.java:144)

... 10更多
在事件时间工作时,您需要安排在源代码中或使用assignTimestampsAndWatermarks进行时间戳提取和水印。看起来您没有这样做,这就解释了为什么您不会得到任何输出(事件时间窗口永远不会被触发)

另外,您的源应该有一个cancel方法。大概是这样的:

private volatile boolean running = true;

@Override
public void run(SourceContext ctx) throws Exception {
    while (running) {
        ...
    }
}

@Override
public void cancel() {
    running = false;
}

我想这也许可以解释你看到的例外情况。在作业开始自行关闭后,源可能会继续运行并发送延迟标记。

确实,正如您所说,这可能是由于使用了事件时间。您能提到整个错误堆栈跟踪吗?Thaks为了您的及时回复,我在上面的文章中发布了堆栈跟踪,“发出延迟标记时出错”可能是解决这个问题的关键,我想。非常感谢您的详细解释。我添加assignTimestampsAndWatermarks未能解决这个问题,堆栈跟踪是一样的。我的DataMockSource有什么问题吗?我发布了上面的代码。我已经扩展了我的答案;看一看。是的,很快就可以解决它了,我发现错误发生在flink调用“ctx.close”之后。我按照您的建议成功运行了代码,现在没有错误,但仍然无法在SlidingEventTimeWindow中计数元素,因为EventTimeTrigger中的OneElement函数没有返回“TriggerResult.FIRE”。再次感谢您的好意,我真的需要你的帮助。