首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Flink中大(5000万)键集的代理键映射

Apache Flink中大(5000万)键集的代理键映射
EN

Stack Overflow用户
提问于 2019-12-10 20:50:33
回答 1查看 134关注 0票数 1

我有一个用例,其中apache flink进程必须集成来自多个源的近乎实时的数据流(事件),但由于不同系统中缺乏统一的键,我需要使用现有数据库中的代理键(SK)查找。SK数据集非常大(50个Million+密钥)。缓存这样的数据集用于流中转换(映射)而不使用DB查找是否可能/可取?如果是,缓存的限制是什么?如果不是,Flink有哪些替代方案?

EN

回答 1

Stack Overflow用户

发布于 2019-12-11 19:15:35

这里有几个选项

本地地图

如果代理键永远不会改变,那么您可以将其加载到RichMapFunction#open中并执行查找。当然,这意味着您必须调整内存设置,以便Flink不会尝试为自己的操作占用所有内存。

一些简单的数学运算:假设两个键都是长度为10的字符串,它们在内存中都需要40字节的字符。加上一些对象开销,我们将达到每个条目大约50个字节。对于5000万个条目,我们需要2.5 GB的RAM来存储它。因为散列映射会有一些开销,所以我计划使用3 GB的RAM。

因此,如果您的任务管理器有8 GB,我会将taskmanager.memory.size设置为4 GB。

Ofc,您需要确保同一任务管理器的不同任务不会两次加载相同的映射。此外,我会选择一种适合于尽可能快地加载数据的格式(例如,Avro),因为缓慢的解析将大大减少启动和恢复时间。

基于状态

如果内存有问题或数据正在更改,您还可以将查找数据建模为map-state。我将为该查找数据添加第二个输入,并使用KeyedCoProcessFunction。来自映射状态的第二个输入的提要。状态应该使用rocks-db后端,这样数据就可以有效地驻留在磁盘上。

连接数据

查找也可以建模为联接。如果您已经在使用Table API,请看一下Join with Temporal Table。这将在内部使用基于状态的方法,但更简洁。您也可以使用mix DataStream with Tables

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59267652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档