Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BigQuery—通过java进行流式处理非常慢_Java_Google Bigquery - Fatal编程技术网

BigQuery—通过java进行流式处理非常慢

BigQuery—通过java进行流式处理非常慢,java,google-bigquery,Java,Google Bigquery,我试图使用基于Google的Java将kafka安装的数据流传输到BigQuery中。数据长度约为12K。我将这些数据分批放入500个大约6Mb的数据块中,并将其流式处理为: InsertAllRequest.Builder builder = InsertAllRequest.newBuilder(tableId); for (String record : bqStreamingPacket.getRecords()) { Map<String, Object> map

我试图使用基于Google的Java将kafka安装的数据流传输到BigQuery中。数据长度约为12K。我将这些数据分批放入500个大约6Mb的数据块中,并将其流式处理为:

InsertAllRequest.Builder builder = InsertAllRequest.newBuilder(tableId);

for (String record : bqStreamingPacket.getRecords()) {
    Map<String, Object> mapObject = objectMapper.readValue(record.replaceAll("\\{,", "{"), new TypeReference<Map<String, Object>>() {});

    // remove nulls
    mapObject.values().removeIf(Objects::isNull);

    // create an id for each row - use to retry / avoid duplication
    builder.addRow(String.valueOf(System.nanoTime()), mapObject);
}

insertAllRequest = builder.build();

...


BigQueryOptions bigQueryOptions = BigQueryOptions.newBuilder().
    setCredentials(Credentials.getAppCredentials()).build();

BigQuery bigQuery = bigQueryOptions.getService();

InsertAllResponse insertAllResponse = bigQuery.insertAll(insertAllRequest);
我看到每次通话的插入时间为3-5秒。不用说,这使得BQ流没有什么用处。从他们的文档中,我担心从Kafka以每100万行/分钟的速度传输Im时会达到每表插入配额,但现在我很乐意解决这个问题

所有行都可以插入。没有错误


我一定是这个设置出了什么问题。请告知。

我们对每个流媒体请求的测量值在1200-2500毫秒之间,这在过去三年中是一致的,正如您在图表中所看到的,我们从Softlayer流媒体到Google

试着将号码从数百到数千行不等,或者直到你找到一些号码并测量每个电话

基于此,您可以推断出更多信息,如您和BigQueryAPI之间的带宽问题、延迟、SSL握手,并最终针对您的环境进行优化


你也可以留下你的项目id/表格,也许一些谷歌工程师会检查它。

所以如果我发送6-900万批,可能需要更长的时间?如果我发送超过1K行,我将超过10M限制。我们实现了我们的调用,例如发送不超过1K行和不超过10MB的有效负载限制。因此,当300行覆盖10Mb限制时,可能会出现这种情况,但1k行的总和可能不等于10Mb。我告诉你,你应该尝试这些数字,并帮助你理解什么可能会变慢。你还应该检查库,它不应该生成自己的线程,也不应该批处理自己的调用。我编辑了这些数字,因为它不正确。在我们运行的最大的BQ项目上,我们的平均时间是2秒。你能在你的回答中包含更多关于这个的细节吗?它不应该产生它自己的线程,也不应该批处理你自己的调用语句?