参考: https://www.jianshu.com/p/179beca9f307

interval join :两条数据流+between边界+过期数据清理

demo:

下面看下源码实现

intervalJoin 属于 KeyedStream,源码部分也在KeyedStream中

  • KeyedStream的intervalJoin创建并返回IntervalJoin
  • IntervalJoin提供了between操作,用于设置interval的lowerBound及upperBound,即between边界区间(默认闭区间),between操作创建并返回IntervalJoined
  • IntervalJoined提供了process操作,process操作里头创建了IntervalJoinOperator

在这里return的是 left.connect(right).keyBy(keySelector1, keySelector2) , 因为left.connect(right)返回的是 ConnectedStreams, keySelector1/2是指demo中两个数据流的keyBy条件,类似与flinksql join中的 on

换类了,现在是IntervalJoinOperator类中了,重点也就在IntervalJoinOperator

  • IntervalJoinOperator继承了AbstractUdfStreamOperator抽象类,实现了TwoInputStreamOperatorTriggerable接口
  • IntervalJoinOperator重写了AbstractUdfStreamOperator(StreamOperator定义)的open、initializeState方法,在initializeState中,创建了leftBuffer和rightBuffer两个MapState,key为Long表示时间时间戳,List<BufferEntry<T>>表示该时刻到来的数据记录,当左流和右流有数据到达时,会分别调用processElement1()和processElement2()方法,它们都调用了processElement()方法
  • processElement方法中实现了 (1)根据数据时间戳和watermark判断数据是否late,如果late就return,否则就添加到buffer中     (2)遍历otherBuffer,(也就是左右mapState,一个是buffer,另外个就是otherBuffer),判断时间是否满足要求,即判断有数据在边界内(ourTimestamp + relativeLowerBound <= timestamp <= ourTimestamp + relativeUpperBound),如果在就调用 collect方法   (3)collect方法也就是我们demo中定义的process方法,对两条流匹配上的数据进行数据  (4)计算这条数据的cleanupTime,调用internalTimerService.registerEventTimeTimer注册清理该数据的timer,到时候就把这条数据从state里清除

所有intervalJoin的很多功能都是在IntervalJoinOperator中实现的

整体总结下来就是 IntervalJoin 里设置上下边界,后在IntervalJoined中进行双流connect,然后在IntervalJoinOperator中实现数据的匹配以及设置数据的过期定时器timer等等。

https://blog.csdn.net/qq_34864753/article/details/111183556 在这篇博客里介绍了intervalJoin的watermark生成以及状态的清理机制,有兴趣的可以看看

Flink Interval Join源码理解相关推荐

  1. flink sql 执行源码走读全流程

    前言 一.flinksql 流程图 二.flinksql 源码分析 三.flink hive sink 源码 总结 文章主要介绍了flinksql 的工作流程, 1.to SqlNode 解析阶段,生 ...

  2. 从hotspot底层对象结构理解锁膨胀升级过程||深入jdk源码理解longadder的分段cas优化机制——分段CAS优化

    深入jdk源码理解longadder的分段cas优化机制 longadder

  3. 打包跳过编译_Apache Flink v1.9-SNAPSHOT 源码编译

    Apache Flink v1.9-SNAPSHOT 源码编译 下载源码 Flink 源码可以从官方 github repository上下载. git clone https://github.co ...

  4. faster rcnn源码理解(二)之AnchorTargetLayer(网络中的rpn_data)

    转载自:faster rcnn源码理解(二)之AnchorTargetLayer(网络中的rpn_data) - 野孩子的专栏 - 博客频道 - CSDN.NET http://blog.csdn.n ...

  5. faster rcnn的源码理解(一)SmoothL1LossLayer论文与代码的结合理解

    转载自:faster rcnn的源码理解(一)SmoothL1LossLayer论文与代码的结合理解 - 野孩子的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/u ...

  6. TLD(Tracking-Learning-Detection)学习与源码理解之(六)

    TLD(Tracking-Learning-Detection)学习与源码理解之(六) zouxy09@qq.com http://blog.csdn.net/zouxy09 下面是自己在看论文和这些 ...

  7. TLD(Tracking-Learning-Detection)学习与源码理解之(五)

    TLD(Tracking-Learning-Detection)学习与源码理解之(五)   zouxy09@qq.com http://blog.csdn.net/zouxy09 下面是自己在看论文和 ...

  8. TLD(Tracking-Learning-Detection)学习与源码理解之(四)

    TLD(Tracking-Learning-Detection)学习与源码理解之(四) zouxy09@qq.com http://blog.csdn.net/zouxy09 下面是自己在看论文和这些 ...

  9. TLD(Tracking-Learning-Detection)学习与源码理解之(三)

    TLD(Tracking-Learning-Detection)学习与源码理解之(三) zouxy09@qq.com http://blog.csdn.net/zouxy09 下面是自己在看论文和这些 ...

最新文章

  1. 006 Spark中的wordcount以及TopK的程序编写
  2. SpringBoot + WebMagic实现一个的爬虫框架
  3. 周立功CAN二次开发接口使用(C#)
  4. python中的numpy函数算相关系数_NumPy ufunc通用函数
  5. CentOS,重启的常用命令
  6. 给老板解释解释,为什么要用SpringCloud alibaba作为微服务开发框架???
  7. echars x轴单位_如何让echarts中y轴的单位位于数值的右上角
  8. 如何精通java_如何精通java技术
  9. 为什么每个邮件收到后都会有一个htm的附件_职场邮件:领导、同事都喜欢收到的邮件丨邮件技巧...
  10. MySQL经典50题
  11. C# 生成word文件 小学一年级口算题生成器(代码)
  12. 校园锐捷路由器使用指南
  13. 原生JS实现自定义滚动条
  14. 用maven-replacer插件选择正则表达式替换
  15. 邓俊辉《数据结构》-向量学习笔记
  16. 招银网络科技Java社招面经
  17. R-CNN论文精读(论文翻译)
  18. Docker基础命令学习
  19. ***/BandwagonHost选择Linux操作系统的技巧
  20. 大疆 android 简书,实测大疆智图与CC(Smart3D)三维建模、正射拼图对比

热门文章

  1. 《后端编程》第七单元作业新
  2. 神州泰岳测试试题(笔试)
  3. pycharm中找不到vue插件
  4. git.exe百度云链接及在官网下载总是失败的解决方法
  5. 山寨电子烟再引风波,悦刻连诉三家侵权品牌
  6. [LeetCode] 447.回旋镖的数量(Easy)C语言题解
  7. Geek爱旅行 - 向日葵的花语 呼呼呼~~
  8. 安全多方计算之二:一文搞懂百万富翁问题
  9. 计算机软著评职称,软著可以评职称吗
  10. (七)ArcCatalog应用基础——图层操作与数据输出