Flink Watermark 传递

Watermark致力于解决数据的乱序和延迟问题,触发window窗口中数据的计算,多channel,source取最小值,对KeyedStream做Window,如果并发度是n,在集群中就有n个WinwowOperator的instance
Window尽心尽力提供各种数据切分机制,在无限流上切分出有限流,进行计算
State勤勤恳恳记录中间状态,并在数据恢复等场景承担着重要的角色

-- OneInputStreamTask.invoke()
      |   
      +----> StreamTask.init 
      |      把StreamTaskNetworkOutput/StreamTaskNetworkInput聚合StreamOneInputProcessor
      +----> StreamTask.runMailboxLoop
      |      从 StreamTask.runMailboxLoop 开始,下面是一层层的调用关系
      -----> StreamTask.processInput()
      -----> StreamTask.inputProcessor.processInput()
      -----> StreamOneInputProcessor.processInput
      -----> input.emitNext(output)
      -----> StreamTaskNetworkInput.emitNext()
      -----> StreamTaskNetworkInput.processElement()


1. 下面是处理普通 Record  
-- StreamTaskNetworkInput.processElement()  
      |   
      | 下面都是一层层的调用关系
      -----> output.emitRecord(recordOrMark.asRecord())
      -----> StreamTaskNetworkOutput.emitRecord()
      -----> operator.processElement(record)
             进入具体算子 processElement 的处理,比如StreamFlatMap.processElement
      -----> StreamFlatMap.processElement(record)
      -----> userFunction.flatMap()
 

2. 下面是处理 Watermark
-- StreamTaskNetworkInput.processElement()  
      |   
      | 下面都是一层层的调用关系
      -----> StatusWatermarkValve.inputWatermark()
      -----> StatusWatermarkValve.findAndOutputNewMinWatermarkAcrossAlignedChannels()
      -----> output.emitWatermark()
      -----> StreamTaskNetworkOutput.emitWatermark()
      -----> operator.processWatermark(watermark) 
      -----> KeyedProcessOperator.processWatermark(watermark) 
             具体算子processWatermark处理,如WindowOperator/KeyedProcessOperator.processWatermark 
             最终进入基类AbstractStreamOperator.processWatermark
      -----> AbstractStreamOperator.processWatermark(watermark) 
      -----> timeServiceManager.advanceWatermark(mark); 第一步处理watermark
             output.emitWatermark(mark) 第二步将watermark发送到下游
      -----> InternalTimeServiceManager.advanceWatermark   
      -----> 下面看看第一步处理watermark  
      -----> InternalTimerServiceImpl.advanceWatermark   
             逻辑timer时间小于watermark的都应该被触发回调。从eventTimeTimersQueue从小到大取timer,如果小于传入的water mark,那么说明这个window需要触发。注意watermarker是没有key的,所以当一个watermark来的时候是会触发所有timer,而timer的key是不一定的,所以这里一定要设置keyContext,否则就乱了
      -----> triggerTarget.onEventTime(timer);
             triggerTarget是具体operator对象,open时通过InternalTimeServiceManager.getInternalTimerService传递到HeapInternalTimerService  
      -----> KeyedProcessOperator.onEeventTime()
             调用用户实现的keyedProcessFunction.onTimer去做具体事情。对于window来说也是调用onEventTime或者onProcessTime来从key和window對應的状态中的数据发送到windowFunction中去计算并发送到下游节点  
      -----> invokeUserFunction(TimeDomain.PROCESSING_TIME, timer);
      -----> userFunction.onTimer(timer.getTimestamp(), onTimerContext, collector);


-- DataStream 设置定时发送Watermark,是加了个chain的TimestampsAndPeriodicWatermarksOperator
-- StreamTaskNetworkInput.processElement()        
      -----> TimestampsAndPeriodicWatermarksOperator.processElement
             会调用AssignerWithPeriodicWatermarks.extractTimestamp提取event time
             然后更新StreamRecord的时间
      -----> WindowOperator.processElement
             在windowAssigner.assignWindows时以element的timestamp作为assign时间

参考
https://www.cnblogs.com/rossiXYZ/p/12345969.html
https://blog.csdn.net/xianzhen376/article/details/90415350

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355