我们当前的数据管道将事件直接“流”送到bigquery。我们在pubsub中有一条消息流,我们首先使用数据流读取,填充并写入其他pubsub主题,然后使用另一个数据流作业读取它,然后写入bigquery。它可以正常工作,但不支持正确的错误处理-我们只是丢弃无效的消息,而不是处理它们,或者至少将它们保存以备后用。我们正在考虑增强流程,将无效的消息放在一边,并在以后允许对其进行简单的修复。我的第一种方法是将这些有问题的消息写到另一个pubsub主题中,然后从那里进行处理,但是很少有人建议将其保存到GCS(可能是AVRO文件)中。问题是:如果我们使用GCS和AVRO,为什么不对所有消息使用它?除了丰富和编写pubsub之外,为什么不丰富和编写GCS?如果这样做,我们可以使用AVROIO()
和watchForNewFiles()
一起使用,这似乎很简单。但这听起来太简单了,太好了。在开始编码之前,我会担心一些事情:
watchForNewFiles()
假设可以正常工作?它会基于文件时间戳吗?命名格式?保持“清单”已知的旧文件?读FileIO
代码,看来方法是天真,这意味着水桶越大,水桶越长比赛进行。我想念什么吗?这种解决方案是否比pubsub更适合无休止的流式传输?