我试图在Google Cloud DataFlow中运行管道,在" Streaming"模式。 管道应该从PubSub主题中读取,但是在我删除它之前它实际上并没有从主题中读取,重新创建它并在管道启动之后将所有消息重新发布到主题。
有没有办法让管道读取已发布的消息?
答案 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中提取的数据。因此数据不会丢失。