小编pwa*_*ach的帖子

遇到从 Dataflow 管道向 BigQuery 写入数据速度缓慢的情况?

使用流式插入和 Python SDK 2.23 写入 BigQuery 时,我遇到了意外的性能问题。

如果没有写入步骤,管道将在一个工作线程上运行,CPU 约为 20-30%。添加 BigQuery 步骤后,管道可扩展到 6 个工作线程,所有工作线程的 CPU 利用率为 70-90%。

我对 Dataflow 和 Beam 还很陌生,可能这种行为是正常的,或者我做错了什么,但在我看来,使用 6 台机器每秒向 BigQuery 写入 250 行有点繁重。我想知道如何才能达到每秒 100K 行的插入配额。

我的管道如下所示:

p
    | "Read from PubSub" >> beam.io.ReadFromPubSub(subscription=options.pubsub_subscription) # ~40/s
    | "Split messages" >> beam.FlatMap(split_messages) # ~ 400/s
    | "Prepare message for BigQuery" >> beam.Map(prepare_row)
    | "Filter known message types" >> beam.Filter(filter_message_types) # ~ 250/s
    | "Write to BigQuery" >> beam.io.WriteToBigQuery(
          table=options.table_spec_position,
          schema=table_schema,
          write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND,
          create_disposition=beam.io.BigQueryDisposition.CREATE_NEVER,
          additional_bq_parameters=additional_bq_parameters,
      )
Run Code Online (Sandbox Code Playgroud)

尽管我在不使用流引擎的情况下经历了类似的行为,但管道使用这些选项运行。

--enable_streaming_engine \ …
Run Code Online (Sandbox Code Playgroud)

python google-cloud-dataflow apache-beam

6
推荐指数
1
解决办法
1251
查看次数