✅ Azure 流分析 ✅ 构造事件流
所有数据流事件都有一个与之关联的 时间戳 。 用户可以使用 TIMESTAMP BY 关键字在以下两种不同时间之一之间进行选择:
- 应用程序时间,即生成事件的时间(由生成事件的应用程序/设备标记)。 使用应用程序时间时,可以使用全局时间线处理所有事件,或使用其自己的时间 线通过子流分析每个设备/分区;
- 到达时间,事件到达云的时间(例如 IoT 中心或事件中心的到达时间)。
除了选择时间戳之外,用户可能还需要定义延迟到达和无序策略,因为出现以下问题:
- 事件的生成者具有时钟倾斜。 当生成者来自不同的计算机时,这很常见,因此它们具有不同的时钟。
- 由于网络延迟,来自同一时钟的事件可能会以不同于发起事件中心的顺序到达事件中心或 IoT 中心
- 分区之间的时钟倾斜。 使用非分区查询时,所有分区中的事件都会由用户选择的时间戳合并。 分区之间的时钟偏差可能会导致处理延迟,因为合并需要等待最慢的分区。
不按顺序排列的输入流可以是:
- 已排序(因此 延迟)。
- 根据用户指定的策略由系统调整。
流分析在按应用程序时间处理时可以容忍延迟和无序事件。
无序策略
按时间排序的事件在流分析中非常重要。 但是,由于上面提到的 3 个问题,通常会收到无序的查询,这可能会影响查询的结果。 “无序策略”允许在定义的容错窗口中到达时按时间戳 对事件重新排序 。 根据所选的设置,到达时间晚于容差的事件会 被删除或调整。
- 调整后:调整为似乎已到达最新的可接受时间。
- 已删除:已丢弃。
可以在 Azure 门户中(作业的“事件排序”选项卡中)调整此设置。 有关详细信息,请参阅 事件顺序注意事项页。
设置大于 0 的无序策略时,流分析会将事件缓冲到该窗口,并在应用临时转换之前使用用户定义的时间戳对事件重新排序。 通常从第一个 3 秒窗口开始是一个很好的最佳做法,然后调整该值以减少调整时间的事件数。 请注意,由于缓冲,副作用是输出延迟的时间相同。 因此,需要调整该值以减少无序事件数,并降低延迟。
延迟到达容错
由于上述各种原因,延迟到达容错窗口用于考虑到达输入源的事件延迟。 简言之,延迟到达窗口是事件生成和在输入源接收事件之间的最大延迟。 首先根据延迟到达容差进行调整,然后下一步完成无序调整。 System.Timestamp() 列将具有分配给事件的最终时间戳。
此设置仅在按应用程序时间进行处理时适用,否则将忽略此设置。 也可以在 Azure 门户中(作业的“事件排序”选项卡中)设置它。 有关详细信息,请参阅 事件顺序注意事项页。
当事件延迟时,时间戳将调整为输入源处的当前排队时间减去延迟到达容错窗口(或丢弃,具体取决于所选的作)。 当来自同一输入流或多个输入流的多个分区组合在一起时,延迟到达容错是每个分区等待新数据的最大时间。
延迟到达容错和稀疏事件
延迟到达策略允许流分析在缺少输入事件的情况下以更及时的方式向前移动和生成输出。 当输入事件稀疏(或在某些事件中心分区中根本没有收到)时,这非常有用。
例如,输入事件每分钟为 select* 查询生成一次。 如果不使用此策略,流分析将无法生成输出结果,直到事件到达所有事件中心分区(向前移动时间)。 如果事件中心有 16 个分区,并且每个事件都传送到不同的分区,则这可能意味着 16 分钟。 使用默认的 5 秒策略时,时钟在第一个事件后向前移动 5 秒,因此在第一个事件之后生成输出事件 5 秒。