Google bigquery 从pubsub移动->;bigquery到pubsub->;地面军事系统(avro)——>;大查询
我们当前的数据管道将事件“直接”流到bigquery。Google bigquery 从pubsub移动->;bigquery到pubsub->;地面军事系统(avro)——>;大查询,google-bigquery,google-cloud-dataflow,apache-beam,google-cloud-pubsub,Google Bigquery,Google Cloud Dataflow,Apache Beam,Google Cloud Pubsub,我们当前的数据管道将事件“直接”流到bigquery。 我们在pubsub中有一个消息流,我们首先使用dataflow读取它,丰富它,然后写入其他pubsub主题,然后使用另一个dataflow作业读取它,然后写入bigquery。 它工作正常,但不支持正确的错误处理-我们只是删除无效消息,而不是处理它们,或者至少保存它们以备将来使用。 我们正在考虑增强流程,将无效消息放在一边,并允许以后对其进行简单修复。 我的第一种方法是将这些有问题的消息写入另一个pubsub主题,并从那里处理它们,但很少有
我们在pubsub中有一个消息流,我们首先使用dataflow读取它,丰富它,然后写入其他pubsub主题,然后使用另一个dataflow作业读取它,然后写入bigquery。
它工作正常,但不支持正确的错误处理-我们只是删除无效消息,而不是处理它们,或者至少保存它们以备将来使用。
我们正在考虑增强流程,将无效消息放在一边,并允许以后对其进行简单修复。
我的第一种方法是将这些有问题的消息写入另一个pubsub主题,并从那里处理它们,但很少有人建议将它们保存到GCS(可能作为AVRO文件)中。
问题是:如果我们使用GCS和AVRO,为什么不对所有消息都这样做?与其丰富内容并向pubsub写信,不如丰富内容并向GCS写信?
如果我们这样做,我们可以使用
AVROIO()
使用watchForNewFiles()
,这看起来很简单。但这听起来太简单,也太好了。在开始编写代码之前,我只关心几件事:
- 我知道在数据流上使用windows会使流作为批处理数据, 但它比每X一次检查新文件灵活得多 分钟。例如,我将如何处理延迟数据等
- 作业无休止地运行,AVRO文件将堆积在一个桶中,
watchForNewFiles()? 它会基于文件时间戳吗?命名格式?保留“名单” 已知旧文件的数量??阅读
code,方法似乎是 相当幼稚,这意味着桶越大,越长 比赛将持续一段时间FileIO
- 有控制如何处理延迟数据的方法
- 我想如果你用
对一个无限增长的GCS bucket进行轮询,这可能会有问题。我找不到提到watchForNewFiles()
API调用可伸缩性的官方文档,但有理由认为它具有O(n)复杂性。如果您希望在生产环境中使用管道并订阅GCP支持,我建议您与GCP支持人员讨论轮询大型GCS存储桶的可伸缩性list
- 有控制如何处理延迟数据的方法
- 我想如果你用
对一个无限增长的GCS bucket进行轮询,这可能会有问题。我找不到提到watchForNewFiles()
API调用可伸缩性的官方文档,但有理由认为它具有O(n)复杂性。如果您希望在生产环境中使用管道并订阅GCP支持,我建议您与GCP支持人员讨论轮询大型GCS存储桶的可伸缩性list