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

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

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

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

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

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

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

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

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

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

2.处理时间

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

在这里插入图片描述

3.事件时间

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

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

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

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

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

4.水位线

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

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

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

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

5.处理时间与事件时间

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

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

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

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

相关文章

(二十四)Kubernetes系列之Helm3

Helm为kubernetes的包管理工具,就像Linux下的包管理器(yum/apt等),可以很方便的将之前打包好的yaml文件部署到kubernetes上。 1.安装访问地址:https://github.com/helm/helm/releases 点击查看最新的版本&#xff0c…

MAXWELL

MAXWELL 一、maxwell是什么 maxwell 官网地址:http://maxwells-daemon.io/ 因为官网是纯英文的,倒是不难懂,但总觉得写的略粗糙(也可能笔者英文水平确实拉胯,有待提高)。所以还是自己百度了一下。 当my…

一篇搞定大论文参考文献,从找文献到交叉引用全流程

我们在写论文过程中,肯定会引用他人的文献,根据自己的写作经历,总结了一套很实用且不会出错的引用方法。1、记录文献顺序 你在论文中每引用一篇文献,你就在文献后加上[1][2]…[n],然后新建一个word文档,在…

java使用easyexcel读取excel内容

java 代码读取excel内容。 使用阿里巴巴easyexcel读取excel内容。 ##excel内容 ##依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.5</version></dependency> ##实体类T…

茅台瑞幸合作“龙年酱香巧克力”;黄仁勋英伟达中国区年会;马斯克预言:20年后地球10亿个人形机器人;闲鱼微信小程序即将上线;张雪峰向郑州大学捐款300万

今日精选 • 茅台与瑞幸合作“龙年酱香巧克力”饮品开卖&#xff0c;单杯优惠价18元• 黄仁勋现身英伟达中国区年会• 马斯克支持大胆预言&#xff1a;20年后地球上将有大约10亿个人形机器人• 闲鱼微信小程序即将上线• 张雪峰向郑州大学捐款300万 科技动态 • Adobe 发布 …

安科瑞AEM96系列三相多功能碳结算电能表——安科瑞赵嘉敏

引言 近年来&#xff0c;我国加速推进碳达峰碳中和标准计量体系建设&#xff0c;但随着各地区、各领域、各行业对碳排放核算数据的需求显著提升&#xff0c;当前碳排放核算体系数据更新偏慢、核算口径不一、基础排放因子滞后等一系列问题也开始凸显。新形势下对碳排放统计核算…

小小蓝的异或消除

题目 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();sc.nextLine();int res 0;for(int i1;i<n;i){int m sc.nextInt()…

非线性最小二乘问题的数值方法 —— 狗腿法 Powell‘s Dog Leg Method (II, Python 简单实例)

Title: 非线性最小二乘问题的数值方法 —— 狗腿法 Powell‘s Dog Leg Method (II, Python 简单实例) 姊妹博文 非线性最小二乘问题的数值方法 —— 狗腿法 Powell‘s Dog Leg Method (I - 原理与算法) 0.前言 本篇博文作为对前述 “非线性最小二乘问题的数值方法 —— 狗腿法…

IP地址组成

一、简介 ​ IP地址由四段组成&#xff0c;每个字段是一个字节&#xff0c;即4个字节、 每个字节有8位&#xff0c;最大值是255(256&#xff1a;0~255)&#xff0c;是全世界范围是唯一的 32 位&#xff08;4个字节 * 8位&#xff09;的标识符。 ​ IP地址由两部分组成&#x…

HackTheBox - Medium - Linux - BackendTwo

BackendTwo BackendTwo在脆弱的web api上通过任意文件读取、热重载的uvicorn从而访问目标&#xff0c;之后再通过猜单词小游戏获得root 外部信息收集 端口扫描 循例nmap Web枚举 feroxbuster扫目录 /api/v1列举了两个节点 /api/v1/user/1 扫user可以继续发现login和singup 注…

【多校联合主办】第二届艺术设计与数字化技术国际学术会议( ADDT 2023)

第二届艺术设计与数字化技术国际学术会议( ADDT 2023&#xff09; 2023 2nd International Conference on Art Design and Digital Technology&#xff08;ADDT 2023&#xff09; 所谓艺术设计&#xff0c;就是将艺术的审美感应用到与日常生活密切相关的设计中&#xff0c;使…

苹果电脑(Mac)的node版本安装以及升降级

在开发过程中&#xff0c;对于不同的开发环境或者较老的项目可能需要切换不同的node版本&#xff0c;此过程会涉及到node版本的升级与降级&#xff0c;安装node版本管理模块n&#xff08;sudo命令&#xff09;。 全局安装n模块 sudo npm install n -g//输入后回车&#xff0c…