【问题标题】:Why are my BigQuery streaming inserts being rate limited?为什么我的 BigQuery 流式插入受到速率限制?
【发布时间】:2015-10-23 14:15:21
【问题描述】:

我在对 BigQuery 进行流式插入时遇到 403 rateLimitExceeded 错误。我正在并行执行许多流式插入,所以虽然我知道这可能会导致某些速率限制,但我不确定具体是什么速率限制。

这是我得到的:

{ "code" : 403, "errors" : [ { "domain" : "global", "message" : "Exceeded rate limits: Your table exceeded quota for rows. For more information, see https://cloud.google.com/bigquery/troubleshooting-errors", "reason" : "rateLimitExceeded" } ], "message" : "Exceeded rate limits: Your table exceeded quota for rows. For more information, see https://cloud.google.com/bigquery/troubleshooting-errors" }

基于BigQuery's troubleshooting docs403 rateLimitExceeded 是由concurrent rate limitingAPI request limits 引起的,但文档听起来好像这些都不适用于流式操作。

但是,错误中的message 提到了table exceeded quota for rows,这听起来更像是403 quotaExceeded 错误。 streaming quotas 是:

  • 最大行大小:1 MB - 我在这个范围内 - 我的平均行大小以 KB 为单位,我特别限制大小以确保它们不会达到 1MB
  • HTTP 请求大小限制:10 MB - 我在这个范围内 - 我的平均批处理大小为
  • 每秒最大行数:每个表每秒 100,000 行。超过此数量将导致 quota_exceeded 错误。 - 无法想象我会结束这个 - 每批大约 500 行,每批大约需要 500 毫秒。我正在并行运行,但插入了大约 2,000 个表,因此虽然我有可能(尽管不太可能)每秒执行 100k 行,但不可能每个表都这样(更像是每个表最大 1,000 行/秒)时间>
  • 每个请求的最大行数:500 - 我正好是 500
  • 每秒最大字节数:每个表每秒 100 MB。超过此数量将导致 quota_exceeded 错误。 - 再一次,我的插入率在按表计算的数量上并不接近。

任何关于此速率限制的想法/建议将不胜感激!

【问题讨论】:

  • 如果您可以提供您的项目/表格,我们可以详细查看可能发生的情况...该错误特定于 100k 行/秒/表格限制,不应触发如果您以 O(1000/s) 速率进行流式传输。
  • 截至 2019 年 8 月,每秒 100000 行也适用于整个项目。因此,如果您的 2000 个表在同一个项目中,并且您平均每秒为每个表执行 50 次插入......

标签: google-bigquery


【解决方案1】:

我怀疑您偶尔会向单个表提交超过 100,000 行每秒。您的并行插入过程是否偶尔会全部排在同一张表上?

这被报告为速率限制错误的原因是给出一个回推信号以减慢速度:要处理单个表上的零星操作峰值,您可以退后并再次尝试分散负载。

这与配额失败不同,配额失败意味着重试仍然会失败,直到配额周期翻转(例如,每日配额限制)。

【讨论】:

  • 在此处提示后进一步调查后,看起来我确实达到了单个表的 100k 行/秒限制。我正在使用 BigQueryTableInserter 的修改版本(来自 github.com/GoogleCloudPlatform/DataflowJavaSDK),我没有意识到它使用 100 个线程池进行插入 - 所以我的每个 Spark 执行器一次最多执行 100 个插入(每个都有自己的JVM),它很容易接近 100K 行/秒/表。最后,我只是缩小了该线程池的大小,错误就消失了。以防万一,我也在使用 expo 后退。
  • 说,当我收到 'rateLimitExceeded' 原因的 403 错误时,我可以看到作业插入了行。现在,在批量加载场景中,我不知道我是否必须回滚这个错误,并且文档不是很清楚。我的默认操作是重试,然后我希望避免在 Bigquery 中出现重复。有什么建议吗?
猜你喜欢
  • 2020-06-09
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 2023-01-08
  • 1970-01-01
相关资源
最近更新 更多