Java Google数据流:从Google云存储读取未绑定的PCollection

Java Google数据流:从Google云存储读取未绑定的PCollection,java,google-cloud-storage,google-cloud-dataflow,stream-processing,Java,Google Cloud Storage,Google Cloud Dataflow,Stream Processing,我有一个管道可以将JSON消息从PubSub(Unbound PCollection)流到Google云存储。每个文件应该包含多个JSON对象,每行一个 我想创建另一条管道,它应该从这个GCS bucket读取所有JSON对象,以便进一步流处理。最重要的是,第二条管道应该作为流而不是批处理工作。意味着我希望它“监听”bucket并处理写入其中的每个JSON对象。未绑定的p集合 有什么方法可以实现这种行为吗 谢谢流式处理仅适用于PubSub数据源。但别担心,你可以实现你的管道 创造 创建侦听Pu

我有一个管道可以将JSON消息从PubSub(Unbound PCollection)流到Google云存储。每个文件应该包含多个JSON对象,每行一个

我想创建另一条管道,它应该从这个GCS bucket读取所有JSON对象,以便进一步流处理。最重要的是,第二条管道应该作为流而不是批处理工作。意味着我希望它“监听”bucket并处理写入其中的每个JSON对象。未绑定的p集合

有什么方法可以实现这种行为吗


谢谢

流式处理仅适用于PubSub数据源。但别担心,你可以实现你的管道

  • 创造
  • 创建侦听PubSub消息的管道。
    • 当消息到达时,读取它并获取文件URI
    • 使用存储API读取文件并注入管道中的每一行
    • 继续你的管道与每一个解码行

流式处理仅适用于PubSub数据源。但别担心,你可以实现你的管道

  • 创造
  • 创建侦听PubSub消息的管道。
    • 当消息到达时,读取它并获取文件URI
    • 使用存储API读取文件并注入管道中的每一行
    • 继续你的管道与每一个解码行

另一位用户提供了一个很好的答案,告诉您如何做您想做的事情,但是,如果我正确理解您的问题,我想我可以推荐一种更干净的方法

假设以下为真,您希望:

  • 在管道的开头接受发布/订阅消息
  • 通过将消息窗口化为一个大消息窗口来处理该消息
  • 将每个消息窗口作为文件写入GCS存储桶
  • 除了上面描述的窗口化之外,还要以另一种方式处理每一行
然后,您可以创建一个管道,在“接受发布/订阅消息”步骤之后简单地分叉。数据流在本机上非常支持这一点。在管道开始处使用发布/订阅接收器时,将保存对返回的
PCollection
对象的引用。然后,您将对这一引用应用多个
DoFn
实现链等。您将能够像现在一样通过写入GCS来进行窗口设置,并以您喜欢的任何方式处理每条消息

可能是这样的:

Pipeline-Pipeline=Pipeline.create(选项);
PCollection messages=pipeline.apply(“从发布/订阅中读取”,PubsubIO.readStrings().fromTopic(“我的主题名称”);
//用于窗口化到GCS的当前管道分叉
messages.apply(“GCS的句柄”,…);
//新叉子更容易处理
messages.apply(“更多内容”,…);

另一位用户提供了一个很好的答案,告诉您如何做您想做的事情,但是,如果我正确理解您的问题,我想我可以推荐一种更干净的方法

假设以下为真,您希望:

  • 在管道的开头接受发布/订阅消息
  • 通过将消息窗口化为一个大消息窗口来处理该消息
  • 将每个消息窗口作为文件写入GCS存储桶
  • 除了上面描述的窗口化之外,还要以另一种方式处理每一行
然后,您可以创建一个管道,该管道在“接受发布/订阅消息”之后分叉“走吧。数据流在本机上非常支持这一点。在管道开始处使用发布/订阅接收器时,将保存对返回的
PCollection
对象的引用。然后,您将对这一引用应用多个
DoFn
实现链等。您将能够像现在一样通过写入GCS来进行窗口设置,并以您喜欢的任何方式处理每条消息

可能是这样的:

Pipeline-Pipeline=Pipeline.create(选项);
PCollection messages=pipeline.apply(“从发布/订阅中读取”,PubsubIO.readStrings().fromTopic(“我的主题名称”);
//用于窗口化到GCS的当前管道分叉
messages.apply(“GCS的句柄”,…);
//新叉子更容易处理
messages.apply(“更多内容”,…);

我很想知道您在这种方法中体验到了什么样的性能。我采用了类似的方法和beam.io.ReadAllFromText()step似乎是一个真正的瓶颈。实现令人满意的吞吐量所需的工作人员数量是不可行的。我很想知道您在使用这种方法时体验到了什么样的性能。我采用了一种类似的方法,beam.io.ReadAllFromText()step似乎是一个真正的瓶颈。达到令人满意的吞吐量所需的工人数量是不可行的。