Google cloud dataflow ValueState的数据流并发错误

Google cloud dataflow ValueState的数据流并发错误,google-cloud-dataflow,Google Cloud Dataflow,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 ke

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

我认为这个例外应该被重新引用。它由状态机制抛出,以指示不应执行该键上的其他工作,并将由数据流运行程序自动重试

这些通常表明,或者特定的工作应该在另一个工人身上执行(因此继续进行将没有帮助)

可能误用state(从一个键存储state对象并试图在另一个键上使用它)也会导致这些错误。如果是这种情况,您可以在Stackdriver日志中的worker或shuffler日志中看到更多诊断消息


如果既不重试也不查看日志记录以及如何使用状态对象帮助,请提供一个作业ID来说明问题。

谢谢,在其他异常中是否也可以显示扩展和迁移到其他工作人员?我们观察到AvroCoder(java.lang.InstanceionException)中似乎不相关的错误,这些错误只有在缩放开始后才会发生。对于给定的元素和键,我们是否应该期望异常最多发生一次,然后在新工作进程上成功处理?在特定测试中,我们观察到(缩放后)数百个异常在几分钟内发生,吞吐量约为1000个事件/秒。InstanceionException有些令人惊讶,可能是一个无关的问题。如果可能的话,您可以使用堆栈跟踪和作业ID启动一个单独的问题线程吗?它可能与读取相关,在扩展发生之前,读取并不真正涉及反序列化。将检查解码并在需要时提出新问题。