当前位置: 首页 > news >正文

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

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

  • Flink Redis维表:Broadcast Join与Lookup Join对比及SQL示例
    • 一、核心概念与原理
      • 1.1 Broadcast Join(广播连接)
      • 1.2 Lookup Join(查找连接)
    • 二、关键区别对比
    • 三、SQL Demo(基于Flink 1.15+)
      • 3.1 Broadcast Join 示例(Redis风控规则维表)
        • 步骤1:定义Redis维表(广播源)
        • 步骤2:定义动账数据流
        • 步骤3:广播连接计算
      • 3.2 Lookup Join 示例(Redis大维表)
        • 步骤1:定义Redis维表(Lookup模式)
        • 步骤2:定义交易流
        • 步骤3:Lookup连接计算
    • 四、总结

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,平衡性能与资源。
http://www.dtcms.com/a/327622.html

相关文章:

  • 正则表达式解析(二)
  • pdftk - macOS 上安装使用
  • 【读代码】深度解析 Researcher:开源自动化科研助手
  • 企业级AI大模型后端基础设施管理:从理论到实践的全链路指南
  • 5 重复匹配
  • WPS文字和Word:不只是表格,段落也可以排序
  • gpt-5与gpt-5-fast
  • 【新模型速递】PAI-Model Gallery云上一键部署gpt-oss系列模型
  • 一起来聊聊GPT-5
  • c++的四种类型转换(static_cast,reinterpret_cast,const_cast,dynamic_cast)详解和代码示例
  • 使用pyqt5实现可勾选的测试用例界面
  • B站 韩顺平 笔记 (Day 16)
  • 如何以开发者的身份开发出比python更好的应用软件?
  • 攻击者将Linux摄像头武器化为攻击工具,可注入击键并发动攻击
  • 使用reqwest+select实现简单网页爬虫
  • 《Fast Automatic White Balancing Method by Color Histogram Stretching》论文笔记
  • 小米宠物空气净化器好用吗?希喂/小米/范罗士核心性能深度对比
  • 5G专网项目外场常见业务测试指南(六)-PingInfoView
  • 力扣面试150(54/150)
  • 如何构建PHP表单页面及验证相关原理(PHP基础)
  • 六十、【Linux系统lvs应用】LVS简介 、 LVS-NAT集群 、 LVS-DR集群
  • 微服务ETCD服务注册和发现
  • 3 Abp 核心框架(Core Framework)
  • 过程设计工具深度解析-软件工程之详细设计(补充篇)
  • 数字孪生如何推动智慧园区精细化管理
  • CV 医学影像分类、分割、目标检测,之【皮肤病分类】项目拆解
  • OHEM (在线难例挖掘) 详细讲解
  • 【Vue.js】生产设备规划工具(报价单Word文档生成)【开发全流程】
  • 无人机航拍数据集|第14期 无人机水体污染目标检测YOLO数据集3000张yolov11/yolov8/yolov5可训练
  • etcd 备份与恢复