Google cloud dataflow 云数据流新鲜度和延迟的确切定义是什么?
问题: 使用云数据流时,我们得到了两个指标(请参阅):Google cloud dataflow 云数据流新鲜度和延迟的确切定义是什么?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,问题: 使用云数据流时,我们得到了两个指标(请参阅): 系统延迟 数据新鲜度 Stackdriver中也提供了以下名称(摘录自): system_lag:数据项等待处理的当前最长持续时间,以秒为单位 data_watermark_age:管道已完全处理的最新数据项的期限(自事件时间戳起的时间) 但是,这些描述仍然非常模糊: “等待处理”是什么意思?消息在pubsub中等待多长时间?或者它在管道内等待的总时间 “最长持续时间”:处理该最长项目后,是否会调整指标 “自事件时间戳起的时间”是否意味着如
由于这些度量与Apache Beam的语义一致,我希望看到一些示例,或者至少更清楚地定义这些度量,以使其可用。这些度量非常棘手。关于它们如何工作的深入探讨可以在中看到 管道被拆分为内存中发生的一系列计算,以及需要将数据序列化到某种数据存储的计算。例如,考虑下面的管道:
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(...)
这条管道将分为两个阶段。阶段是可以应用于内存中的一系列计算
第一阶段是从readfromsub
到GroupByKey
操作。这两个P转换之间的所有操作都可以在内存中完成。要执行GroupByKey
,需要将数据写入持久状态(并因此写入新源)
第二个阶段是从GroupByKey
到WriteToBigQuery
。在这种情况下,数据是从“源”读取的
每个源都有自己的一组水印。您在数据流UI中看到的水印是来自管道中任何源的最大水印
--
回答您的问题:
ReadFromPubSub->Map->WriteToBigQuery
此管道对每个项目执行以下操作:从PubSub读取项目->对其进行操作->插入到BigQuery->**向PubSub确认该项目已被消费**
现在,假设BigQuery服务停止运行5分钟。这意味着PubSub在5分钟内不会收到任何元素的确认。因此,这些元素将在PubSub中停留一段时间
这意味着当BQ写入被阻止时,系统延迟(以及数据新鲜度指标)将膨胀到5分钟