gpt4 book ai didi

google-cloud-dataflow - Cloud Dataflow 新鲜度和延迟的确切定义是什么?

转载 作者:行者123 更新时间:2023-12-04 01:12:49 34 4
gpt4 key购买 nike

问题:
使用 Cloud Dataflow 时,我们会看到 2 个指标(请参阅 this page):

  • 系统延迟
  • 数据新鲜度

  • 这些在 Stackdriver 中也可用以下名称(摘自 here):

    system_lag: The current maximum duration that an item of data has been awaiting processing, in seconds.

    data_watermark_age: The age (time since event timestamp) of the most recent item of data that has been fully processed by the pipeline.


    但是,这些描述仍然非常模糊:
  • “等待处理”是什么意思?消息在 pubsub 中等待多长时间?或者它必须在管道内等待的总时间?
  • “最大持续时间”:在处理了最大项目后,是否会调整指标?
  • “自事件时间戳起的时间”是否意味着如果我的事件在时间戳 t1 放入发布订阅,并且它在时间戳 t2 从管道的一端流出,则管道位于 t1?我想我可以假设,如果指标在 t1,则可以假设处理 t1 之前的所有内容。

  • 问题:
    由于这些指标与 Apache Beam 的语义一致,我希望看到一些示例,或者至少对这些指标进行更清晰的定义以使其可用。

    最佳答案

    这些指标是出了名的棘手。可以在 this talk by a member of the Beam / Dataflow team 中深入了解它们的工作原理。 .

    管道分为内存中发生的一系列计算,以及需要将数据序列化到某种数据存储的计算。例如,考虑以下管道:

    with Pipeline() as p:
    p | beam.ReadFromPubSub(...) \
    | beam.Map(parse_data)
    | beam.Map(into_key_value_pairs) \
    | beam.WindowInto(....) \
    | beam.GroupByKey() \
    | beam.Map(format_data) \
    | beam.WriteToBigquery(...)

    该管道将​​分为两个阶段。阶段是可以在内存中应用的一系列计算。

    第一阶段来自 ReadFromPubSubGroupByKey手术。这两个 PTransform 之间的所有内容都可以在内存中完成。执行 GroupByKey ,数据需要写入持久状态(并因此写入新源)。

    第二阶段来自 GroupByKeyWriteToBigQuery .在这种情况下,数据是从“源”读取的。

    每个来源都有自己的一组水印 .您在 Dataflow UI 中看到的水印是 最大 来自管道中任何来源的水印。

    ——

    回答您的问题:
  • 等待处理的是什么?

  • 答案

    它是元素在 PubSub 中等待的时间。具体来说,元素在管道中的任何源内等待的时间。

    考虑一个更简单的管道:
    ReadFromPubSub -> Map -> WriteToBigQuery .

    此管道对每个项目执行以下操作: Read an item from PubSub -> Operate on it -> Insert to BigQuery -> **Confirm to PubSub that the item has been consumed** .

    现在,假设 BigQuery 服务停机 5 分钟。这意味着 PubSub 在 5 分钟内不会收到任何元素的确认。因此,这些元素会在 PubSub 中卡住一段时间。

    这意味着当 BQ 写入被阻止时,系统延迟(以及数据新鲜度指标)将膨胀至 5 分钟。
  • 处理后是否调整最长持续时间?

  • 答案

    这是正确的。例如,再次考虑之前的管道:BQ 死了 5 分钟。 BQ回来的时候,可能会写入一大批item, 确认为已读 来自 PubSub。这将大大减少系统延迟(和数据新鲜度)回到几秒钟。
  • 从事件时间戳到现在是什么时候?

  • 答案

    事件时间戳可以作为消息的属性提供给 PubSub。这是一个有点棘手的概念,但本质上:

    每个阶段都有一个输出数据水印。 T 的输出数据水印表示计算已经处理了事件时间在 T 之前的所有元素。最新的输出数据水印可以是其所有上游计算的最早输入水印。但是,如果有一些尚未处理的输入数据,则可以阻止输出水印。

    当然,这个指标是启发式的。如果某些数据点很晚才出现,那么数据新鲜度将被阻止。

    ——

    我建议您查看 talk by Slava .它涵盖了所有这些概念。

    关于google-cloud-dataflow - Cloud Dataflow 新鲜度和延迟的确切定义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55049807/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com