44、Flink 的 Interval Join 详解

Interval Join

Interval join 组合元素的条件为 :两个流(暂时称为 A 和 B)中 key 相同且 B 中元素的 timestamp 处于 A 中元素 timestamp 的一定范围内,即 b.timestamp ∈ [a.timestamp + lowerBound; a.timestamp + upperBound]a.timestamp + lowerBound <= b.timestamp <= a.timestamp + upperBound

这里的 a 和 b 为 A 和 B 中共享相同 key 的元素,上界和下界可正可负,只要下界永远小于等于上界即可,Interval join 目前仅执行 inner join

当一对元素被传递给 ProcessJoinFunction,他们的 timestamp 会从两个元素的 timestamp 中取最大值 (timestamp 可以通过 ProcessJoinFunction.Context 访问)。

Interval join 目前仅支持 event time。

上例中,join 了橙色和绿色两个流,join 的条件是:以 -2 毫秒为下界、+1 毫秒为上界。

默认情况下,上下界也被包括在区间内,但 .lowerBoundExclusive().upperBoundExclusive() 可以将它们排除在外。

图中三角形所表示的条件也可以写成更加正式的表达式:

复制代码
orangeElem.ts + lowerBound <= greenElem.ts <= orangeElem.ts + upperBound

代码示例

复制代码
import org.apache.flink.api.java.functions.KeySelector;
import org.apache.flink.streaming.api.functions.co.ProcessJoinFunction;
import org.apache.flink.streaming.api.windowing.time.Time;

...

DataStream<Integer> orangeStream = ...;
DataStream<Integer> greenStream = ...;

orangeStream
    .keyBy(<KeySelector>)
    .intervalJoin(greenStream.keyBy(<KeySelector>))
    .between(Time.milliseconds(-2), Time.milliseconds(1))
    .process (new ProcessJoinFunction<Integer, Integer, String>(){

        @Override
        public void processElement(Integer left, Integer right, Context ctx, Collector<String> out) {
            out.collect(left + "," + right);
        }
    });
相关推荐
Oscar的参数15 分钟前
datagrip连接未预置数据库保姆级教程--以dm数据库为例
大数据·数据库·database
babe小鑫29 分钟前
2026高职大数据技术专业学习数据分析的指南
大数据·学习·数据分析
天远云服30 分钟前
PHP微服务风控架构:无缝接入天远劳动仲裁信息查询API排查用工黑产
大数据·微服务·架构·php
zhangkaixuan45638 分钟前
Paimon 数据湖 + Gravitino 元数据中心:技术原理与实战指南
大数据·flink·paimon·gravitino·datalake
失败才是人生常态1 小时前
大数据基础学习
大数据·学习
北京软秦科技有限公司1 小时前
IACheck AI报告文档审核:高端制造标准引用报告审核的智能导航
大数据·人工智能·制造
中烟创新1 小时前
技术深耕,全域赋能:中烟创新产品矩阵与OpenClaw实现深度融合
大数据·人工智能
QYR_Jodie1 小时前
稳健增速托举刚需扩容:全球X射线荧光光谱仪(XRF)2026-2032年CAGR4.8%,2032年剑指11.73亿美元
大数据·人工智能·市场报告
昨夜见军贴06161 小时前
IACheck AI报告文档审核助力新能源汽车:降低电磁兼容(EMC)检测报告风险,确保合规性与准确性
大数据·人工智能·汽车
zml.~1 小时前
Spark大数据分析:解锁海量数据价值的核心利器
大数据·数据分析·spark