Azure 流分析) (时间偏差策略

在流分析中,所有数据流事件都有与之关联的 时间戳 。 用户可以使用 TIMESTAMP BY 关键字 (keyword) 在以下两个不同的时间之一之间进行选择:

  • 应用程序时间,即生成事件的时间 (由生成事件) 的应用程序/设备标记。 使用应用程序时间时,可以使用全局时间线处理所有事件,或使用自己的时间线子流分析每个设备/分区;
  • 到达时间,事件到达云的时间 (例如IoT 中心或事件中心) 到达时间。

除了选择时间戳之外,由于以下问题,用户可能需要定义延迟到达和无序策略:

  • 事件的生成者具有时钟偏差。 当生成者来自不同的计算机时,这种情况很常见,因此它们具有不同的时钟。
  • 由于网络延迟,源自同一时钟的事件可能以与发起时间不同的顺序到达事件中心或IoT 中心
  • 分区之间的时钟倾斜。 使用非分区查询时,所有分区的事件都会按用户选择的时间戳进行合并。 分区之间的时钟偏差可能会导致处理延迟,因为合并需要等待最慢的分区。

不按顺序排列的输入流可以是:

  • 已排序(因此“已延迟”)
  • 由系统根据用户指定的策略进行调整。

按应用程序时间进行处理时,流分析可以容许延迟事件和无序事件。

无序策略

在流分析中,按时间排序事件非常重要。 但是,由于上述 3 个问题,它们通常收到无序,这可能会影响查询的结果。 无序策略允许在事件到达定义的容差时段内时按时间戳 对事件重新排序 。 晚于容差到达的事件会 被删除或调整,具体取决于你选择的设置。

  • 已调整:调整为在最晚的可接受时间到达。
  • 已删除:已放弃。

可以在作业) 的“事件排序”选项卡中Azure 门户 (调整此设置。 有关详细信息,请参阅 事件顺序注意事项页

设置大于 0 的无序策略时,流分析会将事件缓冲到该窗口,并在应用临时转换之前使用用户定义的时间戳对其进行重新排序。 通常,最好先从 3 秒的窗口开始,然后优化值以减少调整时间的事件数。 请注意,由于缓冲,副作用是输出延迟的时间相同。 因此,需要优化值以减少无序事件的数量,并保持较低的延迟。

延迟到达容差

延迟到达容错窗口用于解释由于上述各种原因而到达输入源的事件的延迟。 简而言之,延迟到达时段是生成事件后,输入源收到事件经历的最大延迟。 首先根据延迟到达容错执行调整,然后根据无序容错执行调整。 System.Timestamp () 列将具有分配给事件的最终时间戳。

仅当按应用程序时间进行处理时,此设置才适用,否则请忽略。 也可以在作业) 的“事件排序”选项卡的Azure 门户 (中设置它。 有关详细信息,请参阅 事件顺序注意事项页

当事件延迟时,其时间戳将调整为输入源处的当前排队时间减去延迟到达容错窗口 (或删除,具体取决于) 选择的操作。 如果将相同输入流或多个输入流中的多个分区组合在一起,则延迟到达容错就是每个分区等待新数据的最长时间。

延迟到达容错和稀疏事件

延迟到达策略允许流分析向前移动时间,并在没有输入事件的情况下以更及时的方式生成输出。 当某些事件中心分区) 中输入事件稀疏 (或根本没有收到输入事件时,这非常有用。

例如,对于 select* 查询,每分钟生成一次输入事件。 如果不使用此策略,则在事件到达所有事件中心分区之前,流分析无法生成输出结果, (将时间向前移动) 。 如果事件中心有 16 个分区,并且每个事件传递到不同的分区,则这可能意味着 16 分钟。 使用默认的 5 秒策略,时钟在第一个事件后向前移动 5 秒,因此输出事件在第一个事件后 5 秒生成。

另请参阅

时间管理 (Azure 流分析)
System.Timestamp () (流分析)
TIMESTAMP BY (Azure 流分析)
事件顺序注意事项