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

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

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

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

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

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

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

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

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

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

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

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

2.处理时间

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

在这里插入图片描述

3.事件时间

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

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

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

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

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

4.水位线

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

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

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

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

5.处理时间与事件时间

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

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

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

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

相关文章

10. Profile

1. 区分环境的配置 1.1. properties 配置 假设,一个应用的工作环境有:dev、test、prod 那么,我们可以添加 4 个配置文件: applcation.properties - 公共配置application-dev.properties - 开发环境配置application-test.proper…

电脑文件mfc140.dll丢失的解决方法指导,怎么快速修复mfc140.dll

mfc140.dll 文件的缺失是个普遍的问题,在日常使用中可能会时不时遇到。本文主要目的是详细介绍一旦遇到 mfc140.dll 文件缺失,应该如何进行下载和安装的步骤。不再赘言,下面就一起深入了解mfc140.dll丢失的解决方法指导。 一. mfc140.dll的作…

跟着pink老师前端入门教程-day09

二十二、定位 22.1 为什么需要定位 1. 某个元素可以自由的在一个盒子内移动位置,并且压住其他盒子 2. 当我们滚动窗口时,盒子是固定屏幕某个位置的 解决方法: 1. 浮动可以让多个块级盒子一行没有缝隙排列显示,经常用于横向排…

Spring Boot开发Spring Security

这里我对springboot不做过多描述&#xff0c;因为我觉得学这个的肯定掌握了springboot这些基础 导入核心依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐security</artifactId> </depen…

如何优雅的实现前端国际化?

JavaScript 中每个常见问题都有许多成熟的解决方案。当然&#xff0c;国际化 (i18n) 也不例外&#xff0c;有很多成熟的 JavaScript i18n 库可供选择&#xff0c;下面就来分享一些热门的前端国际化库&#xff01; i18next i18next 是一个用 JavaScript 编写的全面的国际化框架…

Apipost自动化测试+Jenkins实现持续集成

Apipost 自动化测试支持「持续集成」功能&#xff0c;在安装了Apipost的服务器中输入命令&#xff0c;即可运行测试脚本。 创建自动化测试脚本 在创建好的测试用例中选择「持续集成」。 点击新建&#xff0c;配置运行环境、循环次数、间隔停顿后点击保存会生成命令。 安装 Ap…

C++ STL之stack的使用及模拟实现

文章目录 1. 介绍2. stack的使用3. 栈的模拟实现 1. 介绍 英文解释&#xff1a; 也就是说&#xff1a; stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。 stack是作为容器适配器被实现…

Java JVM垃圾回收 JVM调优 老年代 新生代

如何判断对象可以回收 引用计数法 当一个对象被其他对象引用&#xff0c;该对象计数 1&#xff0c;当某个对象不再引用该对象&#xff0c;其计数 -1当一个对象没有被其他对象引用时&#xff0c;即计数为0&#xff0c;该对象就可以被回收 缺点&#xff1a;循环引用时&#xf…

全桥RLC模态图具体分析

T0时刻&#xff0c;Q6,Q7,Q1.Q4开通&#xff0c;驱动为高电平&#xff0c;励磁电流线性上升,但是lm电流在to是为负电流&#xff0c;这时刻有给副边提供能量&#xff0c;Ip电流开始上升&#xff0c;这个时候给副边的电流也是从0开始上升,这个能量由励磁电感提供&#xff0c;Co给…

HCIP-BGP实验4

搭建实验拓扑图 要求 1.全网可达 2.isp只能配置IP地址 实验开始 配置IP地址及环回 r1,r2,r9,r10配ipv4地址(以r1为例) [Huawei]sysname r1 [r1]interface g0/0/0 [r1-GigabitEthernet0/0/0]ip address 12.1.1.1 24 [r1-GigabitEthernet0/0/0]q [r1]interface LoopBack 0…

【Foxmail】客户端发送邮件错误:SSL Recv :服务器断开连接, errorCode: 6

Foxmail客户端发送邮件提示&#xff1a;SSL Recv :服务器断开连接, errorCode: 6 错误代码 处理方式&#xff1a; 去邮箱生成新的16位授权码&#xff0c;输入到 密码框 内即可。 注&#xff1a;一旦开通授权码&#xff0c;在Foxmail验证时 密码框 里输入的就是 授权码

Ddosify 作为压测工具的使用指南

文章目录 1. 写在最前面1.1 Kubernetes 监控1.2 Performance Testing 2. 命令行安装 & 使用2.1 安装2.2 使用2.2.1 默认的例子2.2.2 定制的例子 3. Dashboard 安装 & 使用3.1 安装3.2 使用3.2.1 简单使用3.2.3 依赖的服务介绍 4. 碎碎念5. 参考资料 1. 写在最前面 由于…

【单例模式】保证线程安全实现单例模式

&#x1f4c4;前言&#xff1a;本文是对经典设计模式之一——单例模式的介绍并讨论单例模式的具体实现方法。 文章目录 一. 什么是单例模式二. 实现单例模式1. 饿汉式2. 懒汉式2.1 懒汉式实现单例模式的优化&#xff08;一&#xff09;2.2 懒汉式实现单例模式的优化&#xff08…

EI论文复现:考虑冷热运行特性的综合能源系统多时间尺度优化调度程序代码!

适用平台/参考文献&#xff1a;MatlabYalmipCplex&#xff1b; 参考文献&#xff1a;电力系统自动化《含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度》 提出考虑冷热特性的综合能源系统多时间尺度优化调度模型&#xff0c;日前计划中通过多场景描述可再生能源的不确定性…

表白墙网站PHP源码,支持封装成APP

源码介绍 PHP表白墙网站源码&#xff0c;适用于校园内或校区间使用&#xff0c;同时支持封装成APP。告别使用QQ空间的表白墙。 简单安装&#xff0c;只需PHP版本5.6以上即可。 通过上传程序进行安装&#xff0c;并设置账号密码&#xff0c;登录后台后切换模板&#xff0c;适配…

牛客30道题解析精修版

1.异常处理 都是Throwable的子类&#xff1a; ① Exception&#xff08;异常&#xff09;:是程序本身可以处理的异常。 ② Error&#xff08;错误&#xff09;: 是程序无法处理的错误。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时&#xff0c;一般不需要…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第3章 k邻近邻法

文章目录 第3章 k邻近邻法3.1 k近邻算法3.2 k近邻模型3.2.1 模型3.2.2 距离度量3.2.3 k值的选择3.2.4 分类决策规则 3.3 k近邻法的实现&#xff1a;kd树3.3.1 构造kd树3.3.2 搜索kd树 算法实现课本例3.1iris数据集scikit-learn实例kd树:构造平衡kd树算法例3.2 《统计学习方法&a…

把Windows系统装进U盘,到哪都有属于你自己的电脑系统

前言 自从接触到WinPE启动盘之后&#xff0c;小白就突然萌生了一个想法&#xff1a;为啥不能把完整的Windows放进U盘呢&#xff1f; 实际上Windows是可以安装进U盘的&#xff0c;外出的时候带上&#xff0c;只需要有台正常开机的电脑就可以使用属于自己的系统。 这个是早已经…

一分钟教你搭建《幻兽帕鲁》服务器

幻兽帕鲁是一款由Pocketpair开发的开放世界生存游戏&#xff0c;融合了多种玩法的游戏&#xff0c;其独特的题材和画风吸引了很多玩家&#xff0c;越来越多的玩家开始尝试自己搭建服务器&#xff0c;享受更加自由的游戏体验。本文将为大家详细介绍如何从零开始搭建《幻兽帕鲁》…

「 网络安全常用术语解读 」杀链Kill Chain详解

1. 简介 早在2009年&#xff0c;Lockheed Martin公司就提出了杀链(Kill Chain)理论&#xff0c;现在也称之为攻击者杀链(Attacker Kill Chain)。杀链其实就是攻击者进行网络攻击时所采取的步骤。杀链模型包括7个步骤&#xff1a;1侦察 -> 2武器化 -> 3交付 -> 4利用 …