Flink Redis维表:Broadcast Join与Lookup Join对比及SQL示例

多维聚合本质:可加性度量与三层架构设计 多维聚合是BI与数据仓库的核心能力,其本质是基于维度建模对事实数据进行有向折叠。理解度量的可加性、半可加性与不可加性,是避免SUM误用、AVG嵌套错误等常见问题的前提;而原子层→汇总层→应用层的三层聚合架构,则从工程上解决维度爆炸、零值缺失与实时性瓶颈。该模式支撑电商、零售、直播等场景下的小时级销售分析、库存快照归因与跨区域同比计算,广泛应用于Doris、ClickHouse及Flink流批一体架构中。本文聚焦可加性度量判定与三层架构落地,覆盖从SQL聚合陷阱到OLAP看板性能优化的完整链路。 阅读详情

Flink Redis维表:Broadcast Join与Lookup Join对比及SQL示例

在Flink流处理中,维表关联是常见需求(如风控场景中关联Redis存储的风控规则)。针对Redis维表,常用方案有Broadcast Join(广播连接)和Lookup Join(查找连接),本文从原理、适用场景、性能差异展开对比,并提供SQL Demo。


一、核心概念与原理

1.1 Broadcast Join(广播连接)

核心逻辑:将小维度表(如Redis中的风控规则)广播到所有并行任务,各任务本地维护一份维表副本(通过Broadcast State),数据流与本地维表直接关联。
Redis集成:先从Redis加载全量表到内存,再通过Flink的Broadcast Stream广播到所有并行实例。

1.2 Lookup Join(查找连接)

核心逻辑:数据流处理时,实时查询外部Redis维表(如通过Async I/O),每次关联操作触发一次Redis查询。
Redis集成:定义Redis维表为Lookup Table,Flink运行时动态调用Redis客户端查询。


二、关键区别对比

维度Broadcast JoinLookup Join
适用数据量小维表(通常<1GB)大维表(支持GB级以上)
更新实时性需手动触发广播更新(如Redis数据变更后重新广播)自动感知Redis变更(查询时获取最新值)
资源消耗内存占用高(全表复制到所有并行任务)内存占用低(仅缓存少量热点数据)
查询延迟低(本地内存访问)较高(网络IO到Redis)
容错复杂度高(需 checkpoint 广播状态)低(依赖Redis持久化,无需 checkpoint 维表)

三、SQL Demo(基于Flink 1.15+)

3.1 Broadcast Join 示例(Redis风控规则维表)

假设Redis存储风控规则(Hash类型,Key为rule_id,Field为threshold),需关联动账数据流(Kafka主题account_tran)。

步骤1:定义Redis维表(广播源)
-- 从Redis加载全量规则(需自定义Source)
CREATE TEMPORARY TABLE redis_rule_broadcast (
    rule_id STRING,
    threshold INT
) WITH (
    'connector' = 'redis',
    'mode' = 'broadcast', -- 标记为广播模式
    'host' = 'redis-host',
    'port' = '6379',
    'database' = '0'
);
步骤2:定义动账数据流
CREATE TEMPORARY TABLE account_tran (
    tran_id STRING,
    amount INT,
    event_time TIMESTAMP_LTZ(3),
    WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND
) WITH (
    'connector' = 'kafka',
    'topic' = 'account_tran',
    'properties.bootstrap.servers' = 'kafka-host:9092',
    'format' = 'json'
);
步骤3:广播连接计算
-- 将规则广播流与数据流关联
SELECT t.tran_id, t.amount, r.threshold
FROM account_tran AS t
LEFT JOIN redis_rule_broadcast FOR SYSTEM_TIME AS OF t.event_time AS r
ON t.rule_id = r.rule_id;

3.2 Lookup Join 示例(Redis大维表)

假设Redis存储商户信息(Hash类型,Key为merchant_id,Field为risk_level),需关联实时交易流。

步骤1:定义Redis维表(Lookup模式)
CREATE TEMPORARY TABLE redis_merchant_lookup (
    merchant_id STRING,
    risk_level STRING
) WITH (
    'connector' = 'redis',
    'mode' = 'lookup', -- 标记为Lookup模式
    'host' = 'redis-host',
    'port' = '6379',
    'database' = '1',
    'lookup.cache-type' = 'lru', -- 开启LRU缓存(减少Redis压力)
    'lookup.cache-size' = '10000'
);
步骤2:定义交易流
CREATE TEMPORARY TABLE transaction_stream (
    order_id STRING,
    merchant_id STRING,
    event_time TIMESTAMP_LTZ(3),
    WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND
) WITH (
    'connector' = 'kafka',
    'topic' = 'transaction_topic',
    'properties.bootstrap.servers' = 'kafka-host:9092',
    'format' = 'json'
);
步骤3:Lookup连接计算
-- 实时查询Redis维表
SELECT s.order_id, s.merchant_id, l.risk_level
FROM transaction_stream AS s
LEFT JOIN redis_merchant_lookup FOR SYSTEM_TIME AS OF s.event_time AS l
ON s.merchant_id = l.merchant_id;

四、总结

  • 选Broadcast Join:维表小、更新不频繁、需低延迟(如风控规则)。
  • 选Lookup Join:维表大、更新频繁、内存受限(如商户信息)。
    实际生产中,可结合Broadcast State+Redis混合模式:热点规则广播,非热点规则Lookup,平衡性能与资源。
多维聚合中的数据操纵:维度裁剪、度量重算与流式导出实战 多维聚合是现代BI与实时OLAP的核心能力,其本质是构建可动态组合、层级感知、语义明确的维度-度量契约体系。区别于传统GROUP BY的静态映射,它支持运行时维度编排、度量类型声明(如ratio/sum/cumulative)和空值语义控制,从而解决维度耦合、度量错位与稀疏断层等关键问题。技术价值在于实现毫秒级任意切片、保障聚合结果业务一致性,并支撑下钻分析、实时告警与模型输入等高阶场景。本文聚焦Data Manipulation in Multi-Dimensional Aggregation这一核心环节 阅读详情

相关推荐

Flink详述双流 Join 3 种解决方案 + 2 种优化方案

1.前言 这一期的面试题主要是介绍 Flink 面试中的高频面试题,Flink 流 Join 相关内容,相信大家在面试中遇到的太多了,本节包含的主要内容如下: Join 的应用场景 为什么流式计算中提到 Join 小伙伴萌就怕呢? 带大家看一遍本文思路 Flink Join 解决方案:Flink Window Join Flink Join 解决方案:Flink Interval Join Flink Join 解决方案:Flink Regular Join 上述 3 种解决方...

u011076848的专栏 1万+

Flink的broadcast join

Flink的broadcast join

大数据知识梳理 1255

Flink与Redis集成:自定义连接器实现维表创建与数据汇入

本文详细介绍了如何在Apache Flink中通过自定义连接器与Redis进行数据交互,包括创建Redis维表和实现数据汇入。文章展示了如何利用现有的Redis连接器和Flink的动态表特性,通过自定义的Source和Sink,实现流式数据与Redis维表的实时Join操作,以及如何将数据批量写入Redis。此外,还探讨了如何通过缓存优化和复用现有格式来提高性能。

数据与算法架构提升之路专栏 1185

Flink系列之:SQL提示

查询块是SQL的基本单元。例如,任何内联视图或 SQL 语句的子查询都被视为与外部查询不同的查询块。例子:一条 SQL 语句可以由多个子查询组成。子查询可以是 SELECT、INSERT 或 DELETE。子查询可以在 FROM 子句、WHERE 子句或 UNION 或 UNION ALL 的子查询中包含其他子查询。对于这些不同的子查询或视图类型,它们可以由多个查询块组成,例如:下面的简单查询只有一个子查询,但它有两个查询块 - 一个用于外部 SELECT,另一个用于子查询 SELECT。

zhengzaifeidelushang的博客 1358

【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计03

编号366-380共15个条目,涵盖了SQL/NoSQL数据库、小文件、对象、向量、CDN、应用框架等各类数据对CPU、GPU、ASIC、FPGA、NPU、内存、SSD、HDD、RAID卡、操作系统、Redis、容器、MPP数据库、CDN等缓存硬件和软件的配置需求。:mark_cache_size,uncompressed_cache_size,merge_tree配置。:调整vm.dirty_ratio,增大vfs_cache_pressure,启用透明大页。

weixin_49199313的博客 226

【信息科学与工程学】计算机科学与自动化—第十五篇 云计算 11 算法篇02

但若第一个应用需求40GB/s,第二个10GB/s,总需求50GB/s>40GB/s,第一个得32GB/s,第二个得8GB/s,不公平。但若分区负载不均(分区1-2各有100任务/s,分区3-4各有50任务/s),A负责1-2(200/s),B负责3-4(100/s),仍均衡。任务 τi​ 的计算需求 Wi​(CPU周期),在频率 f 下执行时间 Ti​=Wi​/f,能耗 Ei​=Pdyn​⋅Ti​=Ceff​⋅V2⋅f⋅(Wi​/f)=Ceff​⋅V2⋅Wi​。若 Mneed​>Mi​,需使用远程显存。

weixin_49199313的博客 105

flink维表查询redis之flink-connector-redis

相对bahir增加的内容有:Table API, 维表查询。参考了腾讯云与阿里云两家主流云产商的流计算产品,取两家之长,并增加了更丰富的功能。

zilong00007的专栏 7359

【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构01

编号类型领域系统软件/硬件或系统集成方案及系统架构模块子模块函数名称/算法名称算法的数学分析及计算机体系架构及数据结构与算法详细设计及参数列表及数值范围设计关联知识1共识算法分布式基石状态机复制架构:Proposer/Acceptor/Learner 多节点角色模型,基于操作转移(Operation Transfer)分布式共识PaxosPaxos 协议(Prepare/Promise/Accept/Accepted 两阶段)数学基础:多数派(Quorum)投票,基于鸽巢原理保证 W+R>N 时读写集合必有

weixin_49199313的博客 261

Flink重点难点:维表关联理论和Join实战

点击上方蓝色字体,选择“设为星标”回复”面试“获取更多惊喜在阅读本文之前,你应该阅读过的系列:《Flink重点难点:时间、窗口和流Join》《Flink重点难点:网络流控和反压》Flink...

微信搜:import_bigdata,大数据领域硬核原创作者 1305

图像特征(一)——颜色特征(颜色直方图,颜色矩,颜色集,颜色聚合向量和颜色相关图)

本文主要是为了更好地理解图像特征,理解各方法的原理。转载请注明出处https://mp.youkuaiyun.com/console/editor/html/105090183 图像模式识别的一般步骤为:输入图像--图像预处理--特征提取--特征选择--图像分类--输出结果。 图像特征主要有:颜色特征、形状特征、纹理特征和空间关系特征。 本文主要介绍颜色特征,并给出matlab上实现的demo。 颜...

gloria_iris的博客 3万+

避坑指南:DeepSeek Function calling流式输出中的常见问题与解决方案

本文深入探讨了在DeepSeek Function Calling中实现流式输出时常见的参数拼接、函数依赖管理和错误处理等核心挑战。针对流式响应中参数碎片化的问题,提供了健壮的参数拼接方案与状态管理策略。同时,文章详细阐述了如何管理函数调用顺序、处理条件性执行,并构建了分阶段的错误处理与重试机制,旨在帮助开发者构建稳定、高效的流式AI应用。

weixin_29062671的博客 201

FlinkSQL维表Join实战指南

在实时数据处理场景中,我们经常需要将流数据与静态或动态变化的数据进行关联,这些静态或动态变化的数据被称为“维表”。例如,在电商订单实时分析中,需要将订单流中的商品ID关联商品维表获取商品名称、类别等信息;在用户行为分析中,需要将用户ID关联用户维表获取用户画像数据。Flink SQL作为Flink生态中处理实时数据的核心组件,提供了灵活高效的维表Join能力。本文将从维表Join的基本概念出发,深入讲解Flink SQL中不同类型维表Join的实现方式、适用场景,并结合实战案例帮助大家快速上手,最后给出性能

supper_M的博客 1236

抖音自定义卡片链接(图文链接)

抖音自定义可以自定义标题,打开链接,和展示图片 效果 主要代码 public void sendMessage(String conversationId, Object aBaseContent) throws Exception { // C233282u5.LIZIZ.LIZ().LIZIZ(LIZ).LIZ(obtain).LIZ(hLn).LIZ((AbstractC59811HHc) new H9Q()); Object HOa = ReflectionUtil

傅恒的博客 4140

别再让维表Join拖慢你的Flink任务!手把手教你用Redis Connector实现高性能Lookup Join

本文深入剖析Flink SQL中维表Join的性能瓶颈,并提供通过Redis Connector实现高性能Lookup Join的实战方案。从本地缓存、异步查询到批量查询的三板斧优化策略,结合具体配置示例和性能测试数据,帮助开发者显著提升任务吞吐量并降低延迟。特别针对Redis Pipeline等高级功能的使用场景和避坑指南进行了详细说明。

weixin_30261095的博客 616

ZLMediaKit在Windows下启用WebRtc编译(64位)

准备软件 cmake-gui vs2017 已经编译好的windows版本openssl(下载地址) 当然,你完全可以自己按照openssl的官网教程自己编译windows版本的openssl libsrtp编译安装 首先,需要将下载好的openssl解压并添加到环境变量。如下图,将下图路径添加到环境变量 其次,下载libsrtp(下载地址) 下载后解压并新建build文件夹,如下图: 在合适位置新建文件夹放置install后的srtp文件,如"D:\develop20..

byna11sina11的博客 1万+

电阻应变式力传感器

电阻应变式力传感器

lu_fresh_student的博客 5073

Apache—Flink实践

Apache—Flink实践

蓝魔的博客 321

Python爬虫实战:Boss直聘职位数据采集实战 - Playwright + 结构化解析完整方案(附CSV导出 + SQLite持久化存储)!

我长期专注 Python 爬虫工程化实战,主理专栏 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 2185

【Flink 】从入门到生产实战:一篇文章吃透流处理核心

本文基于 Flink 1.18/1.19 重构了实时流处理核心知识,摒弃过时的 DataSet API 与旧版 Source/Sink 接口,聚焦流批一体的 DataStream API。重点梳理了 Flink 执行架构、提交流程、部署模式及新特性,涵盖 Source、Transformation、Sink 的最新写法,强调 Watermark 机制、Exactly-Once 保障、状态管理与数据倾斜应对策略。结合生产踩坑经验,为新手提供实战指导,助力高效构建低延迟、高可靠的实时数据处理系统。

zy123456nn的博客 402

015、PCIE带宽计算:理论vs实际——调试手记

最近在调一块图像采集卡,主控抱怨数据吞吐量上不去。规格书上写着PCIE 3.0 x4,理论带宽接近4GB/s,实际测试却卡在2.5GB/s左右。硬件同事拍胸脯说链路训练正常,软件同事咬定DMA配置没问题——这种场景是不是很熟悉?

z534437748的博客 878

Pinocchio 快速详细入门教程 —— 开源机器人运动学动力学库

本文介绍了机器人学中的数字机器人学、正逆运动学、动力学仿真与控制、最优控制等核心主题,以及Pinocchio库的应用。内容包括: 数字机器人学:通过UR5机器人模型演示了构型空间采样、碰撞检测、路径规划等基础操作,使用优化方法在约束条件下寻找有效构型。 运动学:详细讲解了二维和三维机器人的正运动学(构型到末端位置)和逆运动学(目标位置到构型),包括串联机械臂和并联机器人的处理。 动力学与控制:介绍了动力学仿真(如自由落体、摩擦效应)、PD控制、计算扭矩控制,以及接触仿真(碰撞检测与处理)。 最优控制:以独轮

机器人控制与仿真应用 2883

多维聚合变形:从GROUP BY到可演进分析视图的七步炼金术

多维聚合是现代数据分析的核心环节,本质是在高维空间中对数据进行折叠、投影与再组织。它超越基础SQL GROUP BY,涉及维度坐标系映射、粒度锚定与计算上下文声明等关键原理。其技术价值在于支撑动态占比计算、跨层级钻取、宽表/长表互转及合规性逆向解压等复杂场景,广泛应用于BI看板构建、管理驾驶舱交付与Pandas高级数据操作。本文聚焦‘维度重投影’与‘粒度桥接’两大高频热词,系统拆解多维聚合变形的工程化落地路径,覆盖从语义建模、SQL优化到质量监控的完整闭环。

310

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【信息科学与工程学】【数据科学】第四十一篇 ETL知识101

场景偏生产高阶:脏数据隔离、条件插补、鲁棒异常、多版本合并、代理键、SCD混合、外键完整性、规则引擎、血缘解析、CDC精准入湖、乱序去重、漏斗、状态TTL、近似基数、倾斜治理、Z-order/compaction、schema演进、数据合同、批流回溯。“脏数据/插补/异常/多版本/SCD/参照/规则/血缘/CDC/去重/会话漏斗/滑动/HLL/倾斜/Z-order/compaction/schema/合同/回溯/特征/NER/空间/时序/图/加密/DQ/事务”。

weixin_49199313的博客 101

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Flink(三十五)—— Flink 使用 broadcast 实现维表或配置的实时更新

一、案例分析 维表服务在 Flink 中是一个经常遇到的业务场景,例如: 客户端上报的用户行为日志只包含了城市 Id,可是下游处理数据需要城市名字 商品的交易日志中只有商品 Id,下游分析数据需要用到商品所属的类目 物联网温度报警的场景中,处理的是设备上报的一条条温度信息,之前的报警规则是:只要温度大于 20 度需要报警,现在需要改成大于 18 度则报警。这里的报警阈值需要动态调整,因此不建议将代码写死 对于上述的场景,实际上都可以通过维表服务的方式来解决。 二、 维表方案

weixin_42073629的博客 2464

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

flink sql 知其所以然(二)| 自定义 redis 数据维表(附源码)

感谢您的关注 + 点赞 + 再看,对博主的肯定,会督促博主持续的输出更多的优质实战内容!!!1.序篇-本文结构背景篇-为啥需要 redis 维表目标篇-做 redis 维表的预期效果是...

大数据技术派 2713

Flink双流Join 3种解决方案 + 2种优化方案

在流式计算中,左右表的数据都是无界的,而且是实时到来的。这就会引起流式计算中的 2 个问题 + 大数据中的 2 个核心问题

huashetianzu的专栏 4670
上一篇: 【GPT入门】第45课 无梯子,linux/win下载huggingface模型方法
下一篇: 【GPT入门】第46课 vllm安装、部署与使用
*星星之火*
博客等级 码龄12年 3798粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值