Google bigquery 从pubsub移动->;bigquery到pubsub->;地面军事系统(avro)——>;大查询

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主题,并从那里处理它们,但很少有

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

  • 我知道在数据流上使用windows会使流作为批处理数据, 但它比每X一次检查新文件灵活得多 分钟。例如,我将如何处理延迟数据等
  • 作业无休止地运行,AVRO文件将堆积在一个桶中,
    watchForNewFiles()?
    它会基于文件时间戳吗?命名格式?保留“名单”
    已知旧文件的数量??阅读
    FileIO
    code,方法似乎是 相当幼稚,这意味着桶越大,越长 比赛将持续一段时间
我错过什么了吗?这个解决方案不比pubsub更适合无休止的流媒体吗?

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

      是否有任何理由让两条不同的管道代替一条来完成所有工作?另外,我不确定我是否理解这一点,在编写AVRO时,而不是在阅读时,是否需要处理迟到的问题?是否有任何理由让你有两个不同的管道,而不是让一个管道来完成所有的工作?另外,我也不确定我是否正确理解了这一点,在编写AVRO时,而不是在阅读时,是否需要处理迟到的问题?