IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Flink Interval Join源码理解 -> 正文阅读

[大数据]Flink Interval Join源码理解

参考:?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生成以及状态的清理机制,有兴趣的可以看看

?

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:40:01  更:2021-08-12 16:40:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/18 20:53:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码