flink维度表关联

分析&回答

根据我们业务对维表数据关联的时效性要求,有以下几种解决方案:

1、实时查询维表

实时查询维表是指用户在Flink 的Map算子中直接访问外部数据库,比如用 MySQL 来进行关联,这种方式是同步方式,数据保证是最新的。最后,为了保证连接及时关闭和释放,一定要在最后的 close 方式释放连接,否则会将 MySQL 的连接数打满导致任务失败。

一般我们在查询小数据量的维表情况下才使用这种方式,并且要妥善处理连接外部系统的线程,一般还会用到线程池。

2、预加载全量数据

当我们的系统启动时,就将维度表数据全部加载到内存中,然后数据在内存中进行关联,不需要直接访问外部数据库。一旦维表数据发生更新,Flink 任务是无法感知,可以采取定时拉取维表数据

对计算节点的内存消耗很高,所以不能适用于数量很大的维度表

适用于那些实时场景不是很高,维表数据较小的场景

3、LRU 缓存(最近最少使用的数据则被淘汰)

如果维表的数据比较大,无法一次性全部加载到内存中,可以使用LRU策略加载维表数据。

利用 Flink 的 RichAsyncFunction 读取 Hbase 的数据到缓存中,我们在关联维度表时先去查询缓存,如果缓存中不存在这条数据,就利用客户端去查询 Hbase,然后插入到缓存中

4、将维表消息广播出去

复制代码
//1:初始化数据
DataSet<Integer> toBroadcast = env.fromElements(1, 2, 3)

//2:广播数据
.withBroadcastSet(toBroadcast, "broadcastSetName");

//3:获取数据
Collection<Integer> broadcastSet = getRuntimeContext().getBroadcastVariable("broadcastSetName");
复制代码

反思&扩展

flink海量数据高效去重

①基于状态后端

②基于HyperLogLog:不是精准的去重

③基于布隆过滤器(BloomFilter)

快速判断一个key是否存在于某容器,不存在就直接返回。

④基于BitMap

用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此可以大大节省存储空间。

⑤基于外部数据库

选择使用Redis或者HBase存储数据,我们只需要设计好存储的Key即可,不需要关心Flink任务重启造成的状态丢失问题

喵呜面试助手:一站式解决面试问题,你可以搜索微信小程序 喵呜面试助手 或关注 喵呜刷题 -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

相关推荐
什么嘻嘻果冻15 分钟前
零代码建站开户的适用场景,恐象 AI 能建哪些网站
大数据·人工智能
人工智能培训25 分钟前
具身智能环境交互与学习范式原理
大数据·linux·人工智能·学习·算法·机器学习
2601_9567436843 分钟前
上海GEO营销公司技术评估解析|以盾码无界公开产品路线为观察对象,梳理问题池构建、知识库事实锚定、内容审核与跨模型监测流程,明确现场演示和任务追溯的核验要求
大数据·人工智能·产品运营·技术分享·geo·上海
武汉星际互动1 小时前
技术拐点已至:AI Agent给政务大厅带来什么变革?
大数据·人工智能·政务
程序员大阳1 小时前
副队长大数据教程(7)--Hadoop 集群角色配置逻辑详解
大数据·hadoop·分布式·集群·配置·角色·逻辑
RD_daoyi1 小时前
外贸独立站从0到1:平台选择 + 建站流程 + 新手避坑
大数据·服务器·网络·人工智能·搜索引擎·职场和发展
2603_954708312 小时前
微能网协调控制箱突破传统微电网架构瓶颈
大数据·数据库·人工智能·架构·能源
智圣新创012 小时前
教育数字化合规背景下 智圣新创高校一表通建设全国低内耗落地指引
大数据·人工智能
猴子15516812 小时前
长期追踪调研的样本留存是怎么实现的:跨波次对齐、催答调度与质控机制,附五家样本服务实测记录
大数据·经验分享
samLi06202 小时前
贵州贵安新区行政区划面数据(含经纬度)
大数据