私はデータフローを使用して、BigQueryIO.Write.to()
を使用してBigQueryにデータを書き込みます。Dataflow:BigQueryIOでの書き込み時のSocketTimeoutException
は時々、私はデータフローからこの警告が出ます:
{
metadata: {
severity: "WARNING"
projectId: "[...]"
serviceName: "dataflow.googleapis.com"
region: "us-east1-d"
labels: {
compute.googleapis.com/resource_type: "instance"
compute.googleapis.com/resource_name: "dataflow-[...]-08240401-e41e-harness-7dkd"
dataflow.googleapis.com/region: "us-east1-d"
dataflow.googleapis.com/job_name: "[...]"
compute.googleapis.com/resource_id: "[...]"
dataflow.googleapis.com/step_id: ""
dataflow.googleapis.com/job_id: "[...]"
}
timestamp: "2016-08-30T11:32:00.591Z"
projectNumber: "[...]"
}
insertId: "[...]"
log: "dataflow.googleapis.com/worker"
structPayload: {
message: "exception thrown while executing request"
work: "[...]"
thread: "117"
worker: "dataflow-[...]-08240401-e41e-harness-7dkd"
exception: "java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:170)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.read(InputRecord.java:503)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:961)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:918)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:704)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1535)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
at com.google.api.client.http.javanet.NetHttpResponse.<init>(NetHttpResponse.java:37)
at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:94)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:981)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at com.google.cloud.dataflow.sdk.util.BigQueryTableInserter$1.call(BigQueryTableInserter.java:229)
at com.google.cloud.dataflow.sdk.util.BigQueryTableInserter$1.call(BigQueryTableInserter.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)"
logger: "com.google.api.client.http.HttpTransport"
stage: "F5"
job: "[...]"
}
}
私はこの1つ、次のいずれかの「再試行」のログが表示されません。
私の質問は以下のとおりです。私は、データを失うこと
- アム?書き込み操作が正しく行われたかどうかはわかりません。コードを正しく理解すると、書き込みバッチ全体が不確定な状態になります。
- もしそうなら、データを正確に1回BigQueryに書き込む方法がありますか?
- もしそうなら、WARNINGの代わりにERRORの重大度はありませんか?
ここに私の使用の文脈のビットです:
- 私は「時々」0~3倍であることができるKafkaIO.java
- を使用してカフカからの読み込み、ストリーミングモードでデータフローを使用しています時速
- 仕事によって、私は仕事に応じてタイプN1-標準-4
- の2〜36人の労働者を使用しています、私はBigQueryの に3K 10Kへのメッセージ/秒から書いている
- のAv erageメッセージのサイズが3KB
- データフローの労働者たち-east1-Dゾーンにあるされ、BigQueryのデータセットの場所は米国
ありがとうございます。しかし、私はDataflowがこのバッチを再試行するとは思わない。例外がスローされるので、BigQueryによって返されたエラー(もしあれば、それを読み出すまでにタイムアウトした)は 'futures' [(#L221)]に追加されません(https://github.com/GoogleCloudPlatform/DataflowJavaSDK/blob/ ee25e238e65fc71b5db7ba0dace4b45d19dbf07a/sdk/src/main/java/com/google/cloud/dataflow/sdk/util/BigQueryTableInserter.java#L221)の一覧をご覧ください。したがって、 'allErrors'(#L283)は空であり、再試行はありません。 – A21z
私は、投げられた例外が呼び出し元によってどのように処理され、今日後で戻ってくるか見ていきます。 –
A21z - コメントに返信する際に追加情報を追加しました。これが助けにならないかどうか私に教えてください。 –