GCP 数据流:从 Pub/Sub IO 流式传输的系统延迟

GCP Dataflow: System Lag for streaming from Pub/Sub IO

我们使用 "System Lag" 来检查数据流作业的运行状况。例如,如果我们发现系统延迟增加,我们将尝试了解如何降低该指标。关于这个指标几乎没有问题。

The maximum time that an item of data has been awaiting processing

以上是我们点击信息图标时在 GCP Console 中看到的内容。在这种情况下,一项数据意味着什么?流处理有窗口化、事件时间与处理时间、水印等概念。什么时候考虑一​​个项目等待处理?例如,它只是在消息到达时不管其状态如何?

我们尝试将此指标保持在尽可能低的水平,但对于应将其保持在多低,我们没有任何建议。例如,我们是否有一些建议,例如将系统延迟保持在 20 秒到 30 秒之间是最佳的。

系统延迟如何影响事件本身的延迟?

根据正在执行的管道,元素可能在许多地方排队等待处理。这通常是当元素在机器之间传递时,例如在 GroupByKey 内,尽管 PubSub 源也反映了最旧的未确认元素。

对于给定的步骤(包括接收器)"System Lag" 测量最接近该步骤的输入队列中最旧元素的年龄。

此度量值出现峰值并不罕见 -- 元素在处理后会从队列中拉出,因此如果交付了许多新元素,则可能需要一段时间才能使队列恢复到可管理状态尺寸。重要的是系统滞后会在这些峰值后回落。

接收器的延迟取决于几个因素:

  1. 元素到达管道的速率限制了输入水印前进的速率。
  2. windowing 和触发器的配置会影响管道在发出给定 window 之前必须等待的时间。
  3. 系统延迟衡量的是管道内执行的代码当前引入了多少添加延迟。

查看接收器的 "Data Watermark" 可能更容易,它报告了接收器处理的(事件)时间点。