Apache Beam Streaming Dataflow停留在从PubSub读取信息

时间:2019-03-18 17:30:35

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

Apache Beam Python 2.7 SDK 2.11.0对于一个非常简单的Dataflow流管道存在一种奇怪的情况,在这种情况下,需要将来自PubSub订阅的消息解析为几个BiqQuery表。

没有错误也没有异常,并且数据流管道似乎在监视器控制台中运行(如下所示),但是“读取PubSub消息”开始步骤无限期运行,而不会将读取的消息释放到下一个转换中。

Pipeline

它仅在 DataflowRunner 上发生,但在 DirectRunner 上运行良好,因此在Dataflow中,它只会不断累积来自PubSub的消息并缓慢地增加内存,而无需任何进一步的改进。

管道定义如下:

with b.Pipeline(options=pipeline_options) as p:
    metrics, failure \
        = (p
           | 'Read PubSub Message' >> b.io.ReadFromPubSub(subscription=config.incoming, with_attributes=True)
           | 'Parse Telemetry' >> b.FlatMap(parse, Monitor(config)).with_outputs('SUCCESS', 'FAILURE')
           )

    (metrics | 'Store Metrics' >> b.io.WriteToBigQuery(**raw_table))
    (failure | 'Store Failures' >> b.io.WriteToBigQuery(**err_table))

并解析产量两个标记的输出

def parse(message, monitor):  # type: (PubsubMessage, Monitor) -> None
    """
    Args:
        message (PubsubMessage): Telemetry message from a PubSub
        monitor (Monitor): Pipeline KPI monitor
    """
    try:
        metric = RawMetric.from_pub_sub(message)  # type: RawMetric
        yield pv.TaggedOutput(tag='SUCCESS', value=metric.for_json())
        try:
            monitor.count(metric)
        except Exception as error:
            yield pv.TaggedOutput(tag='FAILURE', value="monitor screw up")
    except Exception as error:
        yield pv.TaggedOutput(tag='FAILURE', value="RawMetric screw up")

我想念什么吗?

0 个答案:

没有答案