根据消息内容从Dataflow作业写入动态PubSub主题

时间:2018-03-05 11:46:06

标签: java google-cloud-dataflow apache-beam google-cloud-pubsub

我想基于字段的内容动态地将PCollection的不同元素路由到不同的PubSub主题。主题不是持久的,但是假设它们在运行时执行PubSubIO.Write()时存在。因此,Dataflow应该仅在每个消息的基础上在运行时推断出它们的名称。

BigQuery和动态表名称存在此功能:https://beam.apache.org/documentation/sdks/javadoc/2.0.0/org/apache/beam/sdk/io/gcp/bigquery/DynamicDestinations.html

有没有办法与PubSubIO做类似的事情?

也许不是基于消息内容而是基于属性? https://beam.apache.org/documentation/sdks/javadoc/0.6.0/org/apache/beam/sdk/io/PubsubIO.PubsubMessage.html#getAttribute-java.lang.String-

1 个答案:

答案 0 :(得分:1)

  

有没有办法与PubSubIO做类似的事情?

Pub / Sub没有等效Partition

您需要提前了解所有发布/订阅主题,并在管道中定义它们。可以基于发布/订阅消息的某个值或属性对管道进行分区,并将其路由到适当的发布/订阅主题。 PubsubMessage转换将检查class ProxyMiddleware(object): @classmethod def process_request(self, request, spider): request.meta['proxy'] = "http://127.0.0.1:8118" 并确定邮件所属的分区。

参考:Partition

  

也许不是基于消息内容而是基于属性?

是的,您可以访问邮件的属性。