Datastream至BigQuery报错:数据集元数据更新超限求解决方案
报错信息
Datastream bigquery destination error: Exceeded rate limits: too many dataset metadata update operations for this dataset
BIGQUERY_DATASET_CREATION_FAILED, details: Datastream encountered an error while attempting to create the dataset 'DATASET_NAME'. Original error returned from BigQuery: 'Exceeded rate limits: too many dataset metadata update operations for this dataset.
当前环境
- 数据链路:Cloud SQL(MySQL)-> Datastream -> BigQuery
- 数据规模:1个数据库,约200张表
- 源连接类型:使用PSC接口的私有连接
- CDC方式:基于GTID的复制
- 回填模式:自动
- Schema分组:每个Schema对应一个Dataset
- 流写入模式:
Merge - 延迟限制:15分钟
解决方案
由于官方明确该速率限制无法提升,且Datastream无直接配置更新速率或任务延迟的选项,可尝试以下实操方案:
调整Schema分组策略
放弃「每个Schema对应一个Dataset」的配置,将多个Schema合并到同一个BigQuery Dataset中。原本分散到多个Dataset的元数据更新操作会集中到单个Dataset,摊薄单Dataset的操作频次,避开速率限制。拆分同步任务
将200张表拆分为多个独立的Datastream同步任务,比如分成4个任务各同步50张表。确保不同任务对应的Dataset不重叠,让元数据更新操作分散到不同Dataset,单个Dataset的操作频次就能降到限制以内。手动分批回填
关闭自动回填,改为手动分批触发表的回填:每次仅回填20-30张表,间隔30分钟以上再执行下一批。待所有表完成回填后,再开启CDC流同步,避免短时间内大量元数据更新操作集中触发。临时切换流写入模式
暂时将流写入模式从Merge改为Append,Append模式下BigQuery的元数据更新操作更少,能降低触发速率限制的概率。待同步稳定后,再改回Merge模式(注意提前处理重复数据问题)。
内容的提问来源于stack exchange,提问作者Abdellatif Derbel

