做搞机网站,盘锦做网站企业,网站开发教材,网站开发应用到的技术名词分析回答
根据我们业务对维表数据关联的时效性要求#xff0c;有以下几种解决方案#xff1a; 1、实时查询维表
实时查询维表是指用户在Flink 的Map算子中直接访问外部数据库#xff0c;比如用 MySQL 来进行关联#xff0c;这种方式是同步方式#xff0c;数据保证是…分析回答
根据我们业务对维表数据关联的时效性要求有以下几种解决方案 1、实时查询维表
实时查询维表是指用户在Flink 的Map算子中直接访问外部数据库比如用 MySQL 来进行关联这种方式是同步方式数据保证是最新的。最后为了保证连接及时关闭和释放一定要在最后的 close 方式释放连接否则会将 MySQL 的连接数打满导致任务失败。
一般我们在查询小数据量的维表情况下才使用这种方式并且要妥善处理连接外部系统的线程一般还会用到线程池。
2、预加载全量数据
当我们的系统启动时就将维度表数据全部加载到内存中然后数据在内存中进行关联不需要直接访问外部数据库。一旦维表数据发生更新Flink 任务是无法感知,可以采取定时拉取维表数据 对计算节点的内存消耗很高所以不能适用于数量很大的维度表 适用于那些实时场景不是很高维表数据较小的场景
3、LRU 缓存(最近最少使用的数据则被淘汰)
如果维表的数据比较大无法一次性全部加载到内存中可以使用LRU策略加载维表数据。
利用 Flink 的 RichAsyncFunction 读取 Hbase 的数据到缓存中我们在关联维度表时先去查询缓存如果缓存中不存在这条数据就利用客户端去查询 Hbase然后插入到缓存中
4、将维表消息广播出去
//1初始化数据
DataSetInteger toBroadcast env.fromElements(1, 2, 3)//2广播数据
.withBroadcastSet(toBroadcast, broadcastSetName);//3获取数据
CollectionInteger broadcastSet getRuntimeContext().getBroadcastVariable(broadcastSetName);
复制代码
反思扩展
flink海量数据高效去重
①基于状态后端 ②基于HyperLogLog不是精准的去重 ③基于布隆过滤器BloomFilter 快速判断一个key是否存在于某容器不存在就直接返回。 ④基于BitMap 用一个bit位来标记某个元素对应的Value而Key即是该元素。由于采用了Bit为单位来存储数据因此可以大大节省存储空间。 ⑤基于外部数据库 选择使用Redis或者HBase存储数据我们只需要设计好存储的Key即可不需要关心Flink任务重启造成的状态丢失问题 喵呜面试助手一站式解决面试问题你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] - 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享