在pubsub初始加载到pubsub流后,数据流作业停止处理消息

时间:2018-02-20 10:01:54

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

在我的设置中,我有一个输入订阅消息将被推送到数据流作业读取。这些消息将转换为一个或多个输出消息,然后根据转换的成功发布到主题和错误主题。两个输出主题都存在于不同的项目中。

我的代码如下:

PCollectionTuple transformationOutput = p
            .apply("ReadMessageFromInputTopic", PubsubIO.readMessagesWithAttributes().fromSubscription(options.getInputSubscriptionPath()))
            .apply("CreatePubsubMessageWindow", Window.into(FixedWindows.of(Duration.standardMinutes(1))))
            .apply("TransformMessageToGazelleInput", new Processor());

    transformationOutput.get(PipelineTags.MESSAGE)
            .apply("WriteMessageToSalesCategoryTopic", PubsubIO.writeMessages().to(options.getOutputTopicPath()));
    transformationOutput.get(PipelineTags.ERROR)
            .apply("WriteErrorToErrorTopic", PubsubIO.writeMessages().to(options.getErrorTopicPath()));
    p.run();

当我将此代码提交给数据流(--runner = DataflowRunner)时,它将运行一段时间然后停止,而仍然存在根据pubsub stackdriver指标未确认的消息。使用gcloud检查时,似乎会从订阅中读取消息。每当我更新(重新提交--update)作业时,它将再次处理一些消息。

我在gcp ui中注意到的工作是系统滞后很高(多天),在我的理解中,这意味着有旧的消息没有被处理。

我的猜测是我对窗口函数做错了,因为这对我来说是最令人困惑的部分。我想知道如何确定使用哪种窗口函数。此订阅的消息数量在较长的时间段内变为0,在几个小时内变为每秒一小撮消息。

感谢任何帮助:)。

0 个答案:

没有答案