与 ValueState 的数据流并发错误



Beam 2.1 管道在有状态 DoFn 中使用 ValueState。它在单个工作线程中运行良好,但是当启用缩放时,将失败,并显示"无法从状态读取值"和下面的根异常。任何想法可能导致这种情况?

Caused by: java.util.concurrent.ExecutionException: com.google.cloud.dataflow.worker.KeyTokenInvalidException: Unable to fetch data due to token mismatch for key ��
at com.google.cloud.dataflow.worker.repackaged.com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:500)
at com.google.cloud.dataflow.worker.repackaged.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:459)
at com.google.cloud.dataflow.worker.repackaged.com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:76)
at com.google.cloud.dataflow.worker.repackaged.com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:62)
at com.google.cloud.dataflow.worker.WindmillStateReader$WrappedFuture.get(WindmillStateReader.java:309)
at com.google.cloud.dataflow.worker.WindmillStateInternals$WindmillValue.read(WindmillStateInternals.java:384)
... 16 more
Caused by: com.google.cloud.dataflow.worker.KeyTokenInvalidException: Unable to fetch data due to token mismatch for key ��
at com.google.cloud.dataflow.worker.WindmillStateReader.consumeResponse(WindmillStateReader.java:469)
at com.google.cloud.dataflow.worker.WindmillStateReader.startBatchAndBlock(WindmillStateReader.java:411)
at com.google.cloud.dataflow.worker.WindmillStateReader$WrappedFuture.get(WindmillStateReader.java:306)
... 17 more

我认为应该重新抛出异常。它由状态机制引发,以指示不应对该键执行其他工作,并且数据流运行程序将自动重试。

这些通常表示应该在不同的工作人员身上执行特定工作(因此继续不会有帮助)。

滥用状态(从一个键存储状态对象并尝试在另一个键上使用它)也可能导致这些错误。如果是这种情况,您可能能够在 Stackdriver 日志记录中的工作器或随机播放器日志中看到更多诊断消息。

如果重试或查看日志记录以及使用状态对象的方式都没有帮助,请提供演示问题的作业 ID。

最新更新