news 2026/5/9 19:46:32

Flink Join 核心解析:类型、原理、实操

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flink Join 核心解析:类型、原理、实操

        Flink 中的 Join 是用于关联两个或多个数据流 / 数据集的核心操作,分为批处理(Batch)Join流处理(Stream)Join两大类。批处理 Join 基于静态数据集,逻辑与传统数据库 Join 类似;而流处理 Join 基于无限数据流,需结合窗口状态实现,是 Flink 流处理的重点和难点。以下是详细解析。

一、Flink Join 的核心分类

        Flink Join 主要分为两大维度:

维度类型适用场景核心原理
数据形态批处理 Join(DataSet API)静态数据集关联(如历史数据)基于内存 / 磁盘的哈希 Join、排序合并 Join
数据形态流处理 Join(DataStream API)实时数据流关联(如实时订单 + 用户)基于窗口 / 状态存储,在窗口内关联数据
Join 逻辑Inner Join(内连接)只保留两边都匹配的数据仅输出匹配的记录
Join 逻辑Left Outer Join(左外连接)保留左表所有数据,右表匹配的数据左表无匹配时,右表字段为 null
Join 逻辑Right Outer Join(右外连接)保留右表所有数据,左表匹配的数据右表无匹配时,左表字段为 null
Join 逻辑Full Outer Join(全外连接)保留两边所有数据无匹配时对应字段为 null

注意:Flink 1.12+ 主推 Table API/SQL 实现 Join,其语法更简洁、功能更完善(支持更多 Join 类型),而 DataStream API 需手动实现窗口 / 状态管理。

二、批处理 Join(DataSet API)

        批处理 Join 针对静态数据集,语法和逻辑与传统数据库 Join 一致,Flink 会根据数据量自动选择哈希 Join排序合并 Join优化性能。

1. 核心原理

  • 哈希 Join:将小数据集加载到内存中构建哈希表,遍历大数据集进行匹配(适用于小表 + 大表);
  • 排序合并 Join:将两个数据集排序后,遍历并合并匹配的数据(适用于大表 + 大表)。

2. 代码实操(Java)

import org.apache.flink.api.common.functions.JoinFunction; import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.api.java.DataSet; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.api.java.tuple.Tuple3; public class BatchJoinExample { public static void main(String[] args) throws Exception { // 1. 创建批处理执行环境 ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); // 2. 定义左表:用户数据(用户ID,用户名) DataSet<Tuple2<Integer, String>> userDataSet = env.fromElements( Tuple2.of(1, "Alice"), Tuple2.of(2, "Bob"), Tuple2.of(3, "Charlie") ); // 3. 定义右表:订单数据(订单ID,用户ID,金额) DataSet<Tuple3<Integer, Integer, Double>> orderDataSet = env.fromElements( Tuple3.of(101, 1, 99.9), Tuple3.of(102, 2, 199.9), Tuple3.of(103, 4, 299.9) // 用户ID=4,左表无匹配 ); // 4. Inner Join:按用户ID关联,保留两边匹配的数据 DataSet<Tuple3<Integer, String, Double>> innerJoinResult = userDataSet .join(orderDataSet) .where(0) // 左表的关联字段:用户ID(Tuple2的第0位) .equalTo(1) // 右表的关联字段:用户ID(Tuple3的第1位) .with(new JoinFunction<Tuple2<Integer, String>, Tuple3<Integer, Integer, Double>, Tuple3<Integer, String, Double>>() {
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 18:45:04

springboot+jspm电力监测报修服务平台_34gate3m

目录已开发项目效果实现截图开发技术介绍系统开发工具&#xff1a;核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&…

作者头像 李华
网站建设 2026/5/9 14:40:10

基于PSO - BP的时间序列预测:一键出图的奇妙之旅

基于粒子群优化算法优化BP神经网络(PSO-BP)的时间序列预测 PSO-BP时间序列 一键出图&#xff0c;只需替换成自己数据集即可&#xff0c;有教程。在数据的海洋中&#xff0c;时间序列预测一直是众多领域关注的焦点。今天咱就唠唠基于粒子群优化算法&#xff08;PSO&#xff09;优…

作者头像 李华
网站建设 2026/5/7 15:10:56

LAMMPS-VMD耦合:基于tcl语言反应力场分析化学键生成的成键数目研究工具

LAMMPS反应力场分子动力学模拟成键分析程序 基于vmd的tcl语言脚本支持反应力场原子成键数目分析。 主要用于统计化学反应涉及化学键生成和断裂的体系&#xff0c;比如煤燃烧&#xff0c;石墨烯合成过程等等。 用法简单&#xff0c;指定待计算的元素对即可得到对应键数目随模拟时…

作者头像 李华
网站建设 2026/5/9 11:20:16

ASO优化如何“顺时而为”?从节日到四季的全年优化指南

应用商店优化 (ASO) 中的季节性因素包括新年、圣诞节、情人节、万圣节、黑色星期五、网络星期一…… 能够提升应用流量的机会数不胜数。再加上体育赛季的开始、电视剧的首播、大型促销活动以及当地的节日——所有这些因素加起来&#xff0c;就构成了我们所说的&#xff1a;季节…

作者头像 李华
网站建设 2026/5/8 12:08:43

飞算JavaAI一键修复器:漏洞自动检测+精准修复,告别手动踩坑

在Java开发领域&#xff0c;代码安全始终是开发者不可逾越的核心议题。然而&#xff0c;随着项目规模持续扩大、业务逻辑日渐复杂&#xff0c;代码中的安全漏洞也随之滋生&#xff0c;给项目稳定运行埋下隐患。通用AI模型虽能识别部分常见漏洞代码模式&#xff0c;但在提供可直…

作者头像 李华
网站建设 2026/4/17 18:53:09

从竞合到自主:国产CAD软件的渐进替代战略

在全球制造业数字化转型与供应链安全日益重要的双重背景下&#xff0c;计算机辅助设计&#xff08;CAD&#xff09;软件领域的竞争正超越单纯的产品对比&#xff0c;进入一个以战略耐心和路径规划为特征的新阶段。核心共识在于&#xff1a;短期来看&#xff0c;国产与国际主流C…

作者头像 李华