데이터 흐름을 사용하여 BigQueryIO.Write.to()
을 사용하여 BigQuery에 데이터를 쓰고 있습니다.BigflowIO로 작성하는 경우 Dataflow : 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: "[...]"
}
}
나는이 한 다음 어떤 "재시도"로그를 볼 수 없습니다.
내 질문은 : 나는 데이터 손실
- 건가요? 쓰기 작업이 올바르게 수행되었는지는 확실하지 않습니다. 코드를 올바르게 이해하면 전체 쓰기 배치가 불확실합니다.
- 그렇다면 정확히 한번 BigQuery에 데이터를 쓸 수있는 방법이 있습니까?
- 그렇다면 경고 대신 심각도가 ERROR가되어서는 안됩니까? 여기
내 사용의 맥락 약간의 :
- 내가 스트리밍 모드에서 데이터 흐름을 사용하고, 카프카에서 읽기 KafkaIO.java
- 사용은 "때때로"에서 0이 될 수 3 회 작업에 따라 시간
- 당, 내가 BigQuery를
- AV로 3K 메시지 10K에/s의에서 쓰고 작업에 따라 유형 N1-표준 4
- 의 2 (36) 근로자를 사용하고 있습니다 erage 메시지 크기가
- 데이터 흐름 노동자들이 우리-east1-D 영역에로 3kB 입니다 BigQuery에 데이터 세트의 위치는 미국이다
답장을 보내 주셔서 감사합니다. 그러나 나는 Dataflow가이 배치에 대해 재 시도 할 것이라고 확신하지 못합니다. 예외가 발생하기 때문에 BigQuery에 의해 반환 된 오류 (있는 경우)는 'futures' [(# L221)] (https://github.com/GoogleCloudPlatform/DataflowJavaSDK/blob/)에 추가되지 않습니다. ee25e238e65fc71b5db7ba0dace4b45d19dbf07a/sdk/src/main/java/co.kr/google/cloud/dataflow/sdk/util/BigQueryTableInserter.java # L221) 목록에 있습니다. 그러므로'allErrors' (# L283)는 비어 있고 재 시도가 없습니다. – A21z
나는 던져진 예외가 호출자에 의해 어떻게 처리되는지 나중에 살펴보고 오늘 나중에 다시 돌아올 것입니다. –
A21z - 귀하의 의견에 회신하여 추가 정보를 추가했습니다. 이것이 도움이되지 않으면 알려주세요. –