我的团队开发的 Dataflow 管道突然开始卡住,停止处理我们的事件。他们的工作日志充满了警告消息,说某个特定步骤卡住了。奇怪的是,失败的步骤是不同的,一个是 BigQuery 输出,另一个是 Cloud Storage 输出。
以下是我们收到的日志消息:
对于 BigQuery 输出:
Processing stuck in step <STEP_NAME>/StreamingInserts/StreamingWriteTables/StreamingWrite for at least <TIME> without outputting or completing in state finish
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
at java.util.concurrent.FutureTask.get(FutureTask.java:191)
at org.apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl$DatasetServiceImpl.insertAll(BigQueryServicesImpl.java:765)
at org.apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl$DatasetServiceImpl.insertAll(BigQueryServicesImpl.java:829)
at org.apache.beam.sdk.io.gcp.bigquery.StreamingWriteFn.flushRows(StreamingWriteFn.java:131)
at org.apache.beam.sdk.io.gcp.bigquery.StreamingWriteFn.finishBundle(StreamingWriteFn.java:103)
at org.apache.beam.sdk.io.gcp.bigquery.StreamingWriteFn$DoFnInvoker.invokeFinishBundle(Unknown Source)
对于 Cloud Storage 输出:
Processing stuck in step <STEP_NAME>/WriteFiles/WriteShardedBundlesToTempFiles/WriteShardsIntoTempFiles for at least <TIME> without outputting or completing in state process
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
at java.util.concurrent.FutureTask.get(FutureTask.java:191)
at com.google.cloud.hadoop.util.AbstractGoogleAsyncWriteChannel.waitForCompletionAndThrowIfUploadFailed(AbstractGoogleAsyncWriteChannel.java:421)
at com.google.cloud.hadoop.util.AbstractGoogleAsyncWriteChannel.close(AbstractGoogleAsyncWriteChannel.java:287)
at org.apache.beam.sdk.io.FileBasedSink$Writer.close(FileBasedSink.java:1007)
at org.apache.beam.sdk.io.WriteFiles$WriteShardsIntoTempFilesFn.processElement(WriteFiles.java:726)
at org.apache.beam.sdk.io.WriteFiles$WriteShardsIntoTempFilesFn$DoFnInvoker.invokeProcessElement(Unknown Source)
所有应用程序都已耗尽并重新部署,但一段时间后(3 到 4 小时)发生了同样的事情。他们中的一些人已经运行了 40 多天,然后他们突然陷入了这种状态,而没有对代码进行任何更改。
我想寻求一些帮助以了解此问题的原因。
以下是一些存在这些问题的 Dataflow 作业的 ID:
卡在 BigQuery 输出中:
2019-03-04_04_46_31-3901977107649726570
卡在 Cloud Storage 输出中:
2019-03-04_07_50_00-10623118563101608836
Processing stuck
消息并不一定意味着您的管道实际上已卡住。这些消息由执行相同操作超过 5 分钟的工作人员记录。
通常,这仅表示操作缓慢:外部 RPC,或等待外部进程(在对 BigQuery 执行加载或查询作业时非常常见)。
如果您看到此类消息在您的管道中经常发生,或者数量越来越多( 5m
、 10m
、 50m
、 1h
等),那么它可能表示卡住了 - 但如果您看到它偶尔在您的管道中,那么无需担心。
值得考虑的是,在旧版本的 Beam(从 2.5.0 到 2.8.0)中,用作默认安全提供程序的 Conscrypt 库存在死锁问题。截至 Beam 2.9.0, Conscrypt is no longer the default security provider .
另一种选择是降级到 Beam 2.4.0,其中 conscrypt 也不是默认提供程序。