【大数据】流处理基础概念(二):时间语义(处理时间、事件时间、水位线)

  • 流处理基础概念(一):Dataflow 编程基础、并行流处理
  • 流处理基础概念(二):时间语义(处理时间、事件时间、水位线)
  • 流处理基础概念(三):状态和一致性模型(任务故障、结果保障)

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

流处理基础概念(二):时间语义

  • 1.流处理场景下一分钟的含义
  • 2.处理时间
  • 3.事件时间
  • 4.水位线
  • 5.处理时间与事件时间

本篇博客,我们将介绍流式场景中时间语义和不同的时间概念。我们将讨论流处理引擎如何基于乱序事件产生精确结果,以及如何使用数据流进行历史事件处理并实现 时间旅行

1.流处理场景下一分钟的含义

当处理一个持续到达且可能无穷的事件流时,时间便成了应用中最为核心的要素。假如你想持续计算结果,比如每分钟计算一次,那么一分钟在流式应用环境中的含义到底是什么?

假设有某个应用程序会分析用户玩在线手游时产生的事件。该应用将用户组织成不同团队,并会收集每个团队的活动信息,这样就能基于团队成员完成游戏目标的速度,提供诸如额外生命或等级提升的游戏奖励(例如,如果团队所有成员在一分钟内消除了 500 个泡泡,他们就会提升一级)。皮皮是个铁杆玩家,每天早晨上班路上都会玩这个游戏。但是有个问题:皮皮住在上海,每天乘地铁上班。而众所周知,上海地铁上手机上网信号很差。因此考虑如下情况:皮皮开始消泡泡的时候手机还能联网向分析应用发送事件,突然地铁开进隧道,手机断网了。皮皮继续玩他的,此时游戏产生的事件会缓存在手机里。在地铁离开隧道,皮皮重新上线后,之前缓存的事件才会发送给应用。此时应用该怎么办呢?在上述示例中,一分钟的含义又是什么?需要把皮皮离线的时间考虑在内吗?

在这里插入图片描述
当地铁进入隧道断网时,应用接收游戏事件会中断一会儿,此时事件会缓存在玩家手机中,并在网络恢复后发出。

在线游戏这个简单场景展示了算子语义应该依赖事件实际发生时间,而非应用收到事件的时间。在这个手游例子中,后果可能非常糟糕,以至于皮皮和他团队的其他玩家失望透底,再也不想碰这个游戏。但其实还有更多时间敏感应用,需要我们对其处理语义进行保障。如果我们仅考虑现实时间一分钟内收到多少数据,那结果可能会随网络连接速度或处理速度而改变,而事实上每分钟收到的事件数目是由数据本身的时间来定义的。

在上面的例子中,流式应用可以使用两个不同概念的时间,即 处理时间processing time)和 事件时间event time)。

2.处理时间

处理时间是当前流处理算子所在机器上的本地时钟时间。基于处理时间的窗口会包含那些恰好在一段时间内到达窗口算子的事件,这里的时间段是按照机器时间测量的。如下图所示,在上述皮皮的例子中,处理时间窗口在他手机离线后会继续计时,因此不会把他离线那段时间的活动考虑在内。

在这里插入图片描述

3.事件时间

事件时间是数据流中事件实际发生的时间,它以附加在数据流中事件的时间戳为依据。这些时间戳通常在事件数据进入流处理管道之前就存在(例如事件的生成时间)。如下图所示,即便事件有延迟,事件时间窗口也能准确的将事件分配到窗口中,从而反映出真实发生的情况。

在这里插入图片描述
事件时间将处理速度和结果内容彻底解耦。基于事件时间的操作是可预测的,其结果具有确定性。无论数据流的处理速度如何、事件到达算子的顺序怎样,基于事件时间的窗口都会生成同样的结果。

使用事件时间要克服的挑战之一是如何处理延迟事件。普遍存在的无序问题也可以借此解决。

依靠事件时间,我们可以保证在数据乱序的情况下结果依然正确,而且结合可重放的数据流,时间戳所带来的确定性允许你对历史数据 “快进”。这意味着你可以通过重放数据流来分析历史数据,就如同它们是实时产生的一样。

此外,你可以把计算 “快进” 到现在,这样一旦你的程序赶上了当前事件产生的进度,它能够以完全相同的程序逻辑作为实时应用继续运行。

4.水位线

在到目前为止有关事件时间窗口的讨论中,我们一直忽略了一个非常重要的方面。怎样决定事件时间窗口的触发机制?换言之,我们需要等多久才能确定已经收到了所有发生在某个特定时间点之前的事件?此外,我们如何得知数据会产生延迟?鉴于分布式系统现实的不确定性以及外部组件可能引发任意延迟,这两个问题都没有完美的答案。我们将了解如何利用水位线(Watermarks)来设定事件时间窗口的行为。

水位线是一个全局进度指标,表示我们确信不会再有延迟事件到来的某个时间点。本质上,水位线提供了一个逻辑时钟,用来通知系统当前的事件时间。当一个算子接收到时间为 T 的水位线,就可以认为不会再收到任何时间戳小于或等于 T 的事件了。水位线无论对于事件时间窗口还是处理乱序事件的算子都很关键。算子一旦收到某个水位线,就相当于接收到信号:某个特定时间区间的时间戳已经到齐,可以触发窗口计算或对接收的数据进行排序了

水位线允许我们在结果的 准确性延迟 之间做出取舍。激进的水位线策略保证了低延迟,但随之而来的是低可信度。该情况下,延迟事件可能会在水位线之后到来,我们必须额外加一些代码来处理它们。反之,如果水位线过于保守,虽然可信度得以保证,但可能会无谓地增加处理延迟。

在很多现实应用中,系统无法获取足够多的信息来完美地确定水位线。以手游场景为例,现实中根本无法得知用户会离线多久。他们可能正在过隧道,可能正在上飞机,也可能直接退坑不玩了。无论水位线是由用户定义还是自动生成,只要存在 “拖后腿” 的任务,追踪分布式系统中的全局进度就可能出现问题。因此简单地依赖水位线并不总是可以高枕无忧。而流处理系统很关键的一点是能够提供某些机制来处理那些可能晚于水位线的迟到事件。根据应用需求的不同,你可能想直接忽略这些事件,将他们写入日志或利用他们去修正之前的结果。

5.处理时间与事件时间

此刻你可能心存疑惑:既然事件时间能够解决所有问题,为何还要去关心处理时间?事实上,处理时间的确有其特定的适用场景。处理时间窗口能够将延迟降至最低,由于无需考虑迟到或乱序的事件,窗口只需简单地缓冲事件,然后在达到特定时间后立即触发窗口计算即可。因此对于那些更重视处理速度而非准确度的应用,处理时间就会派上用场。另一种情况是,你需要周期性地实时报告结果,而无论其准确性如何。一个常见示例应用是实时监控仪表盘,它会接收并展示事件聚合结果。最后,处理时间窗口能够表示数据流自身的真实情况,这可能会在某些用例中派上用场。例如,你可能想观察数据流的接入情况,通过计算每秒事件数来检测数据中断。

总而言之,虽然处理时间提供了很低的延迟,但它的结果依赖处理速度具有不确定性,事件时间则与之相反,能保证结果的准确性,并允许你处理延迟甚至无序的事件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用pysimplegui+opencv编写一个摄像头的播放器

需求 使用pysimplegui和opencv实现一个播放器,播放 摄像头的画面。 代码实现 import cv2 import time from typing import Iterable, NamedTuple, Optionalimport PySimpleGUI as sgclass CameraSpec(NamedTuple):name: strindex: intwidth: intheight: intfps: i…

c# ADODB.Recordset实例调用Fields报错

代码: using System; using System.CodeDom; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ADODB;namespace ConsoleApp1 {internal class Programre{static ADODB.Recordset recordsetInstance…

代码随想录刷题笔记 DAY15 | 翻转二叉树 No.226 | 对称二叉树 No.101

Day 15 01. 翻转二叉树(No. 226) 题目链接 代码随想录题解 1.1 题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9…

Odoo14 中的小部件列表

们有不同类型的小部件用于不同的目的,帮助我们简化操作。小部件用于使代码变得简单且用户友好,这将有助于软件的编码和编程方面。在 Odoo 14 开发中,我们可以利用不同的小部件,这些小部件可用于编程操作的某些特定方面。这些简化工…

Oracle Linux 9.3 安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任,图解仅供参考,请悉知!本次安装图解是在一个全新的演示环境下进行的,演示环境中没有任何有价值的数据,但这并不代表摆在你面前的环境也是如此。生产环境…

微信小程序元素/文字在横向和纵向实现居中对齐、两端对齐、左右对齐、上下对齐

元素对齐往往是新学者的一大困惑点&#xff0c;在此总结常用的各种元素和文字对齐方式以供参考&#xff1a; 初始显示 .wxml <view style"width: 100%;height: 500rpx; background-color: lightgray;"><view style"width: 200rpx;height:100rpx;bac…

2023年NOC大赛(学而思赛道)创意编程Python初中组决赛真题

2023年NOC大赛&#xff08;学而思赛道&#xff09;创意编程Python初中组决赛真题 题目总数&#xff1a;7 总分数&#xff1a;100 编程题 第 1 题 问答题 二进制回文 编程实现: 输入一个正整数&#xff0c;判断它的二进制形式是否是回文数&#xff0c;如果是输出True…

MySQL建表练习

练习题目&#xff1a;通过所提供的E-R图和数据库模型图完成库表的创建&#xff0c;并插入适量的数据.要求必须使用SQL命令进行构建。 已知如下&#xff1a; 1、创建客户信息表&#xff1a; 代码&#xff1a; CREATE DATABASE Bank; //建库CREATE TABLE Userinfo(Cust…

MacBook自带邮箱设置

MacBook自带邮箱设置 邮件—->偏好设置 服务器设置 收件服务器(POP) 用户名: xxxxxxliang 密码: ***** 主机名:mail.xxx.com.cn 自动管理连接设置 勾上 发件服务器(SMTP) 帐户:xxx.com.cn 用户名:xxxxxxliang 密码:**** 主机名:mail.xxx.com.cn 注意: 自动管理连接设置 不…

蓝桥杯备战——2.矩阵键盘

1.分析原理图 由上图可以看到若J5跳线帽接地&#xff0c;就S4~S7就可以当做四路独立按键&#xff0c;若接到P44&#xff0c;则就是4*4的矩阵键盘。 2.独立按键处理 相对传统的按键延时消抖方案&#xff0c;这里我采用更高效&#xff0c;更经典&#xff0c;更偏向产品级应用的…

[Linux基础开发工具---vim]关于vim的介绍、vim如何配置及vim的基本操作方法

一、vim及其三种模式的简单介绍 Vim是一个类似于Vi的文本编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面,如多级撤销、多窗口操作、崩溃后也可以恢复、增加了稳定性、关键字自动补全、上下文自动补全等…

系统架构14 - 软件工程(2)

需求工程 软件需求两大过程三个层次业务需求(business requirement)用户需求(user requirement)功能需求 (functional requirement)非功能需求 概述活动阶段需求获取基本步骤获取方法 需求分析三大模型数据流图数据字典DD 需求定义需求验证需求管理需求基线变更控制过程变更控制…

基于卡尔曼滤波的平面轨迹优化

文章目录 概要卡尔曼滤波代码主函数代码CMakeLists.txt概要 在进行目标跟踪时,算法实时测量得到的目标平面位置,是具有误差的,连续观测,所形成的轨迹如下图所示,需要对其进行噪声滤除。这篇博客将使用卡尔曼滤波,对轨迹进行优化。 优化的结果为黄色线。 卡尔曼滤波代码…

SQL查询数据库环境(dm8达梦数据库)

SQL查询数据库环境dm8达梦数据库 环境介绍 环境介绍 某些环境没有图形化界面,可以使用sql语句查询达梦数据库环境情况 SELECT 实例名称 数据库选项,INSTANCE_NAME 数据库选项相关参数值 FROM V$INSTANCE UNION ALL SELECT 授权用户,(SELECT AUTHORIZED_CUSTOMER FROM V$LICE…

对话框与多窗体设计 —— 自定义对话框及其调用

3.2 自定义对话框及其调用3.3 Splash与登录窗口 3.2 自定义对话框及其调用 在一个应用程序设计中&#xff0c;为了实现一些特定的功能&#xff0c;必 须设计自定义对话框。自定义对话框的设计一般从 QDialog继承&#xff0c;并且可以采用UI设计器可视化地设计对 话框。对话框的…

vivado DDS学习

实现DDS通常有两种方式&#xff0c;一种是读取ROM存放的正弦/余弦信号的查表法&#xff0c;另一种是用DDS IP核。这篇学习笔记中&#xff0c;我们要讲解说明的是VIVADO DDS IP核的应用。 目前本篇默认Phase Generator and SIN/COS LUT&#xff08;DDS&#xff09;的standard模式…

【SpringCloud Nacos】 微服务治理介绍及Nacos引入初体验

文章目录 前言服务治理介绍什么是服务治理1、服务发现2、服务配置3、服务健康检测 常见的注册中心ZookeeperEurekaConsulNacos Nacos 简介Nacos 实战入门搭建nacos环境1、安装nacos2、配置nacos3、访问nacos 将商品微服务注册到 nacos1、在 pom. xml 中添加 nacos 的依赖2、在主…

spring cloud之分布式事务

写在前面 1&#xff1a;分布式事务介绍 参考MySQL之分布式事务 。 2&#xff1a;seata实战 架构图&#xff1a; 可以看到seata在这里作为协调者的角色&#xff0c;协调所有事务的提交以及回滚&#xff0c;其中seata使用MySQL存储每个分支事务的执行状态信息&#xff0c;以…

gitlab设置/修改克隆clone地址端口

最近由于公司要停测试库云服务器? 什么?要停测试库服务器??? 是的! 你没听错。 真是醉了,多大的集团,为了省钱,也真是拼了, 作为开发人员,没有测试服务器,犹如断臂之人。 所以,在之前搭建环境的时候都没有写文档,今天算是弥补上,以后都可以作为参考了, …

MySQL和Redis的事务有什么异同?

MySQL和Redis是两种不同类型的数据库管理系统&#xff0c;它们在事务处理方面有一些重要的异同点。 MySQL事务&#xff1a; ACID属性&#xff1a; MySQL是一个关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;支持ACID属性&#xff0c;即原子性&#xff08;Ato…