猿问

BigQuery 流式插入在 GKE 上失败

我们有具有 3 个 n2-highcpu-8 节点的 GKE 集群,用 GO 编写的 Web 应用程序扩展到 3 个实例(每个节点 1 个),使用流式传输将所有请求写入 BigQuery,我注意到非常奇怪的行为:

在高应用程序使用率期间,应用程序的 3 个实例中有 2 个在流式写入中开始 100% 失败,仅写入“超出上下文截止日期”作为错误,当我删除这 2 个 pod 并且它们恢复接收流量时,旧的 1 开始因“超出上下文截止日期”而失败,而新的 2 中的 1 成功继续写入数据,另一个开始失败。

我浏览了 BigQuery 文档中提供的报价和限制,但没有发现任何可能与此案例相关的内容,查看 Stackdriver Monitoring 以查看每张表每秒有多少写入以及 1500 左右的数字,以及数据的大小sent 也很小 1-5kb,我们不使用批量写入,所以它主要通过 goroutines 在请求到来时尽快完成。

BigQuery Logging 也没有任何错误/警告。

是否有任何隐藏的限制,或者整体 BigQuery 流式写入仅适用于少量同时写入,我们需要一些使用 Pub/Sub 和 Dataflow 的队列解决方案将数据大量传输到 BigQuery?

GKE 和 BigQuery 数据集位于 europe-west-2,这种情况每天都在发生

[编辑]

以下是来自最大表之一的一些流统计数据,如果它确实有任何区别:

流缓冲区统计 估计大小 249.57 MB 估计行 1,640,220 最早进入时间 2020 年 12 月 3 日,18:43:00


MYYA
浏览 119回答 1
1回答

喵喵时光机

实际上这个问题与应用程序的 Affinity 设置的错误配置有关,并且 2 个 pod 一直在同一个 GKE 节点上运行,在黄金时段消耗了 100% 的 cpu,这似乎是一个相关的问题,所以在排序之后我们没有在写入 BigQuery 时看到任何上下文截止日期消息或错误
随时随地看视频慕课网APP

相关分类

Go
我要回答