Google cloud dataflow PubsubIO.readStrings多久从订阅中提取一次

Google cloud dataflow PubsubIO.readStrings多久从订阅中提取一次,google-cloud-dataflow,apache-beam,google-cloud-pubsub,Google Cloud Dataflow,Apache Beam,Google Cloud Pubsub,我试图更好地理解Beam/Dataflow的概念,所以假设我有以下流媒体管道: 管道 .apply(PubsubIO.readStrings().fromSubscription(“某些订阅”)) .适用(新DoFn()的第{ @过程元素 公共void processElement(ProcessContext c){ 字符串消息=c.element(); debug(“获取消息:{}”,消息); c、 输出(消息); } })); 无限源多久从订阅中提取一次消息?这是否可配置(可能基于win

我试图更好地理解Beam/Dataflow的概念,所以假设我有以下流媒体管道:

管道
.apply(PubsubIO.readStrings().fromSubscription(“某些订阅”))
.适用(新DoFn()的第{
@过程元素
公共void processElement(ProcessContext c){
字符串消息=c.element();
debug(“获取消息:{}”,消息);
c、 输出(消息);
}
}));
  • 无限源多久从订阅中提取一次消息?这是否可配置(可能基于windows/触发器)

  • 由于没有定义自定义窗口/触发器,也没有接收器(只有一个记录并重新输出消息的ParDo),我的ParDo是否仍会在收到消息时立即执行,并且该设置是否存在任何问题(没有定义任何窗口/触发器/接收器)


  • 它将持续从订阅中提取消息-消息一到达,就会立即进行处理(模网络和RPC延迟)

    窗口和触发器根本不影响这一点——它们只影响在分组操作(GroupByKey和Combine)中对数据进行分组的方式。如果您的管道没有分组操作,那么窗口和触发器基本上是不可操作的


    梁模型没有接收器的概念-写入各种存储系统(例如,写入文件、写入BigQuery等)实现为常规梁复合变换,由
    ParDo
    GroupByKey
    和其他任何组件组成。例如,将每个元素写入其自己的文件可以由
    ParDo
    实现,其
    @ProcessElement
    打开文件,将元素写入其中并关闭文件。

    也许我误解了你的答案,但字面上讲的是汇——或者这是一个不同的概念?此外,在上面的示例管道中,发布/订阅消息通过ParDo(该ParDo只是记录并重新输出消息)后,什么时候会得到确认?哎哟,文档的这一部分明显过时了。Beam很早以前就提供了一个名为Sink的API,但是该API被删除了,因为很明显它没有做任何简单的组合转换所不能做的事情。我们会更新的。至于确认:在确认消息的确切时间是不确定的。一旦运行程序能够保证它不会丢失,运行程序就会对其进行确认-例如,如果运行程序已将其持久保存在缓冲区中,或者已对其进行了处理,并且其结果已持久保存,等等。我已发送了一个拉取请求,以在确认消息时修复文档和regd:是,消息通过您的ParDo后会被确认。Dataflow runner生成一个小的消息包并在其上运行您的ParDo,一旦完成了该包,包中的所有消息都将被确认。Bundle的大小可以非常小(单个消息),或者在大容量发布子主题的情况下更大。谢谢@jkff+@raghu-angadi!