问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Flink 双流 Join 的3种操作示例

发布网友 发布时间:2024-10-23 22:50

我来回答

1个回答

热心网友 时间:2024-10-27 23:05

在数据库进行OLAP分析时,两表JOIN操作是常见操作。在流式处理中,有时也需要在两条流上进行JOIN操作以获取更多信息。Flink DataStream API提供了3个算子实现双流JOIN,分别是:

join() 算子

coGroup() 算子

intervalJoin() 算子

本文将举例说明它们的使用方法,并简单介绍interval join的原理。

准备数据

从Kafka接入点击流和订单流,并转化为POJO。

join() 算子

join() 算子提供"Window join"语义,按照指定字段和(滚动/滑动/会话)窗口进行inner join,支持处理时间和事件时间两种时间特征。以下示例以10秒滚动窗口,通过商品ID关联两个流,取得订单流中的售价相关字段。

简单易用。

coGroup() 算子

coGroup() 算子实现left/right outer join,需要开窗,CoGroupFunction比JoinFunction更灵活,可以按照用户指定逻辑匹配左流和/或右流的数据并输出。以下例子实现了点击流left join订单流的功能,采用nested loop join思想。

intervalJoin() 算子

join() 和coGroup()都是基于窗口进行关联的。但在某些情况下,两条流的数据步调可能不一致。Flink提供了"Interval join"语义,按照指定字段以及右流相对左流偏移的时间区间进行关联,即:

right.timestamp ∈ [left.timestamp + lowerBound; left.timestamp + upperBound]

interval join是inner join,不需要开窗,需要用户指定偏移区间的上下界,只支持事件时间。示例代码如下,需要分别在两个流上应用assignTimestampsAndWatermarks()方法获取事件时间戳和水印。

interval join的实现原理

KeyedStream.process(ProcessJoinFunction)方法调用的重载方法的逻辑如下:

先对两条流执行connect()和keyBy()操作,利用IntervalJoinOperator算子进行转换。在IntervalJoinOperator中,会利用两个MapState分别缓存左流和右流的数据。

当左流和右流有数据到达时,会分别调用processElement1()和processElement2()方法,它们都调用了processElement()方法。这段代码的思路是:

1.取得当前流StreamRecord的时间戳,判断是否是迟到数据,是则丢弃。

2.将时间戳和数据插入当前流对应的MapState。

3.遍历另外一个流的MapState,如果数据满足前述的时间区间条件,则调用collect()方法将该条数据投递给用户定义的ProcessJoinFunction进行处理。

4.注册时间戳为timestamp + relativeUpperBound的定时器,负责在水印超过区间的上界时执行状态的清理逻辑,防止数据堆积。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
王卡专属免流包是什么意思 腾讯王卡专属流量是什么意思 人防临空墙排烟机房可以留洞吗? 瑞士转机的问题? 雅阁、第九代凯美瑞、迈腾,大空间的中级车推荐 云顶之弈双人排位介绍 金铲铲之战 金铲铲段位相差多少可以一起打? 现在上海办理居住证需要本人去吗 34周加5天是几个月 孕34周是几个月了 孕34周如何预防早产 肛瘘与坐的软凳不透气有关吗? 初级溶酶体的特点 如何高效接入 Flink:Connecter / Catalog API 核心设计与社区进展_百 ... 实例讲解Flink 流处理程序编程模型 ...2011年3月——5月选定领证、结婚吉日,请高手指点 鞋带花卷教你在家做,手指绕一绕,简单省时颜值高,看一遍就会做 我和男朋友打算2011年结婚,哪天是黄道吉日?请高手指点 准备在2011年4-5月份结婚请大师帮忙算一下,男阳历1984年10月28日14... ...求出IP地址的范围,网络地址,网关地址和广播地址呢? “耶律”、“爱新觉罗”是中国百家姓之一吗? 现在满族人的姓氏包括以前的皇族爱新觉罗氏,现在是否绝大多数都用汉族... 百家姓里为什么没有爱新觉罗和孛儿只斤? 百家姓上面明明没有 爱新觉罗嘛!但是听说现在还有姓的 猪煤气中毒的症状 久座屁股上长泡破了是褥疮吗 速卖通无忧退货保障计划好不好?服务费率多少? vivos7i(t)程序比我删除些,好多停止运行 速卖通无忧退货有哪些国家?服务费率是多少? ...呆一俩个月请问怎么办护照签证?需要准备什么资料?不是留学 从广东汕头到广东深圳有多少公里,大概需要多少钱? 煤气中毒后清醒会失忆吗 硬盘可以打开但是复制东西到硬盘就会提示无这个盘,我的电脑里会突然消失... 吉林省第二松花江防汛机动抢险队怎么样? ...下角显示有硬件插入,打开“我的电脑”里却找不到该移动硬盘... 我的移动硬盘无法读出来.在电脑里没盘符显示.不是供电不足的问题.在... 2015年阳历9月7日出生的是什么星座 m.ziyun.com 母亲说,我出生回家后的一天晚上,我像是得了什么绝症,像要死一样。和我... 江西大宇职业技术学院院系设置 江西大宇学院院系设置 江西大宇职业技术学院招生问题。急急急! ...符号有没有无所谓。起码要八个字或八个字... 江西大宇学院简介 江西南昌大宇学院 win732刷到64结果每次开机都是蓝屏 江西大宇职业技术学校怎么样?计算机信息管理专业怎样?毕业后好找工作吗... 广州的二本学校有哪些 ...急用,然后要长的,别太长,符号神马的有没有无所谓,谢谢大神了_百度知 ... 电饭煲 如果锅带电怎么办 《碧蓝航线》解密五十铃的获得之道,玩家必知的攻略! 为什么别人摸着电饭煲不漉电我摸着漉电