从 pubsub->bigquery 移动到 pubsub->gcs (avro)->bigquery

Moving from pubsub->bigquery to pubsub->gcs (avro)->bigquery

我们当前的数据管道将我们的事件 "directly" 流式传输到 bigquery。
我们在 pubsub 中有一个消息流,我们首先使用数据流读取、丰富并写入其他 pubsub 主题,然后我们使用另一个数据流作业读取它,然后写入 bigquery。
它工作正常,但不支持正确的错误处理 - 我们只是丢弃无效消息,而不是处理它们,或者至少保存它们以备后用。
我们正在考虑改进流程,将无效消息放在一边,并允许稍后对其进行简单修复。
我的第一种方法是将那些有问题的消息写入不同的 pubsub 主题,并从那里处理它们,但很少有人建议将它们保存到 GCS(可能是 AVRO 文件)中。
问题是:如果我们使用 GCS 和 AVRO,为什么不对所有消息都这样做?为什么不丰富和写入 GCS,而不是丰富和写入 pubsub?
如果我们这样做,我们可以使用 AVROIO()watchForNewFiles(),这看起来很简单。
但这听起来太简单了,也太好了。在开始编码之前,我担心以下几点:

我错过了什么吗?这个解决方案不是比 pubsub 更适合无休止的流媒体吗?

  • a set of APIs控制如何处理迟到的数据
  • 我想如果你用 watchForNewFiles() 轮询一个无限增长的 GCS 桶会有问题。我找不到官方文档提到 list API 调用的可伸缩性,但认为它具有 O(n) 复杂性是合理的。如果您想在生产环境中使用管道并订阅 GCP 支持,我建议您与 GCP 支持人员讨论轮询大型 GCS 存储桶的可伸缩性。