Google Cloud DataFlow PubSubIO无法从完整主题中读取内容

时间:2016-07-03 20:34:26

标签: google-cloud-dataflow google-cloud-pubsub

我试图在Google Cloud DataFlow中运行管道,在" Streaming"模式。 管道应该从PubSub主题中读取,但是在我删除它之前它实际上并没有从主题中读取,重新创建它并在管道启动之后将所有消息重新发布到主题。

有没有办法让管道读取已发布的消息?

2 个答案:

答案 0 :(得分:1)

听起来像提供Pub / Sub订阅(Pub/Sub I/O documentation中的更多详细信息)可以解决您的问题。订阅创建后将缓冲消息,允许在管道启动时读取这些消息。

答案 1 :(得分:1)

请使用云控制台在pub sub中创建自定义订阅。 在代码中尝试这样的事情。

 PCollection<TableRow> datastream = p.apply(PubsubIO.Read.named("Read device iot data from PubSub")

            .subscription(String.format("projects/%s/subscriptions/%s",<ProjectId>,<Subscriptionname>))

            .timestampLabel("ts")
            .withCoder(TableRowJsonCoder.of()));

请注意,订阅时,您可以订阅主题或订阅名称。

在上面的代码中,我订阅了我在pub子控制台中明确创建的订阅。 进行显式订阅的优势在于,即使您的数据流代码处于脱机状态,它也会存储从pub sub中提取的数据。因此数据不会丢失。