首页 > 其他分享 >Time+Watermark

Time+Watermark

时间:2024-11-26 19:00:57浏览次数:5  
标签:11 59 Watermark 用户 时间 事件 Time 数据

Time的分类 (时间语义)

EventTime:事件(数据)时间,是事件/数据真真正正发生时/产生时的时间

IngestionTime:摄入时间,是事件/数据到达流处理系统的时间

ProcessingTime:处理时间,是事件/数据被处理/计算时的系统的时间

EventTime的重要性

假设,你正在去往地下停车场的路上,并且打算用手机点一份外卖。选好了外卖后,你就用在线支付功能付款了,这个时候是11点59分(EventTime)。恰好这时,你走进了地下停车库,而这里并没有手机信号。因此外卖的在线支付并没有立刻成功,而支付系统一直在Retry重试“支付”这个操作。
当你找到自己的车并且开出地下停车场的时候,已经是12点01分了(ProcessingTime)。这个时候手机重新有了信号,手机上的支付数据成功发到了外卖在线支付系统,支付完成。

在上面这个场景中你可以看到,
支付数据的事件时间是11点59分,而支付数据的处理时间是12点01分

问题:
如果要统计12之前的订单金额,那么这笔交易是否应被统计?
答案:
应该被统计,因为该数据的真真正正的产生时间为11点59分,即该数据的事件时间为11点59分,
事件时间能够真正反映/代表事件的本质! 所以一般在实际开发中会以事件时间作为计算标准。

还可以通过钉钉打卡、饭卡机 等 举例子。

一条错误日志的内容为:
2020-11-11 23:59:58 error NullPointExcep --事件时间
进入Flink的时间为2020-11:11 23:59:59      --摄入时间
到达Window的时间为2020-11:12 00:00:01     --处理时间
问题:
对于业务来说,要统计每天的的故障日志个数,哪个时间是最有意义的?
答案:
EventTime事件时间,因为bug真真正正产生的时间就是事件时间,只有事件时间才能真正反映/代表事件的本质! 

某 App 会记录用户的所有点击行为,并回传日志(在网络不好的情况下,先保存在本地,延后回传)。
A用户在 11:01:00 对 App 进行操作,B用户在 11:02:00 操作了 App,
但是A用户的网络不太稳定,回传日志延迟了,导致我们在服务端先接受到B用户的消息,然后再接受到A用户的消息,消息乱序了。
问题:
如果这个是一个根据用户操作先后顺序,进行抢购的业务,那么是A用户成功还是B用户成功?
答案:
应该算A成功,因为A确实比B操作的早,但是实际中考虑到实现难度,可能直接按B成功算
也就是说,实际开发中希望基于事件时间来处理数据,但因为数据可能因为网络延迟等原因,出现了乱序,按照事件时间处理起来有难度!

在实际环境中,经常会出现,因为网络原因,数据有可能会延迟一会才到达Flink实时处理系统。我们先来设想一下下面这个场景:
原本应该被该窗口计算的数据因为网络延迟等原因晚到了,就有可能丢失了

总结:
1.事件时间确实重要, 因为它能够代表事件/数据的本质,是事件/数据真真正正发生/产生的时间
2.按照事件时间进去处理/计算,会存在一定的难度, 因为数据可能会因为网路延迟等原因, 发生乱序或延迟到达, 那么最后的计算结果就有可能错误或数据丢失
3.需要有技术来解决上面的问题,使用Watermark技术来解决!

标签:11,59,Watermark,用户,时间,事件,Time,数据
From: https://blog.csdn.net/qq_58242165/article/details/144037492

相关文章

  • 《艾尔登法环》运行时弹窗“由于找不到vcruntime140.dll,无法继续执行代码”要怎么解
     作为一名老头环二周目玩家,我相信很多铁铁在玩老头环的时候可能遇到的各种问题,尤其是文件丢失或损坏导致的系统报错。今天,我们就来聊聊《艾尔登法环》这款游戏在运行时弹窗提示“由于找不到vcruntime140.dll,无法继续执行代码”的问题,并给出几种实用的解决办法。《艾尔登法环......
  • 项目中封装的time_util常用的方法
    """时间工具"""importdatetimeSTANDARD_DATE_FMT_STR='%Y-%m-%d'STANDARD_DATETIME_FMT_STR='%Y-%m-%d%H:%M:%S'#timestamp、date、datetime、date_str、datetime_str互转defis_today(time_str,_type=STANDARD_......
  • 界面控件DevExpress WPF v24.2新功能预览 - 支持DateOnly & TimeOnly
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • 电脑操作记录ManicTime Pro v2024.3修改版
    软件介绍一天当中大部分时间都在与电脑为伴,那当你静下来的时候是否真正思考过,这一天到底用电脑做了些什么?是否只是沉迷于某个游戏荒废了一天或者只忙于工作,没有时间放松一下。是时候具体分析一下了,而ManicTime很适合来帮你完成这份工作,它会静静地在后台记住你的电脑操作记录,然后......
  • RTE (Run-Time Environment)
    IntroductionThisdocumentdescribestheMICROSARRTEgenerationprocess,theRTEconfigurationwithDaVinciConfiguratorandtheRTEAPI.TheMICROSARRTEgeneratorsupportsRTEandcontractphasegeneration.Additionally,applicationtemplatecodecanb......
  • [Javascript] Import the Same JavaScript Module Multiple Times with Cache Busting
    WhenattemptingtoloadthesamemoduletwiceinJavaScriptyou'llhitacacheandcodewon'tre-run.Inscenarioswhereyouactuallydowanttohavestateinyourmodules,you'llhavetouseacache-bustingtechniquebypassingaquerypar......
  • pytorch运行错误:RuntimeError: a leaf Variable that requires grad is being used in
    tensor张量参与的运算,都会生成计算图,哪怕其中只有一个tensor,剩下的也都会被强制类型转换因此每一步要分清实在构建计算图还是在更新值。每一个tensor分为grad梯度和data。grad也是一个tensor。如果要更新,务必确保参与运算的每一个元素都是值(非tensor)出现报错的原因就是更新......
  • datetime.timedelta(days=1)是什么意思
    datetime.timedelta是Python标准库datetime模块中的一个类,用于表示两个日期或时间之间的差异。它表示的是一段时间的跨度或持续时间,比如几天、几小时、几分钟、几秒等。1.timedelta(days=1)的含义timedelta(days=1)创建了一个时间间隔对象,表示1天的时间跨度。具体来......
  • 【解决MongoDB安装难题!】计算机丢失VCRUNTIME140D.dll?一招教你快速修复!
    在安装或运行Java的MongoDB相关程序时,如果遇到“无法启动此程序,因为计算机丢失VCRUNTIME140D.dll”的错误,通常是由于缺少MicrosoftVisualC++Redistributable包。VCRUNTIME140D.dll是VisualC++2015-2019Redistributable的一部分,用于支持C++应用程序的运行时库。以下是解......
  • Win11系统提示找不到System.Runtime.Caching.resources.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个System.Runtime.Caching.resources.dll文件(......