Apache flink 在设计基于ApacheFlink的ETL时,如何正确验证数据库中记录的存在性?

Apache flink 在设计基于ApacheFlink的ETL时,如何正确验证数据库中记录的存在性?,apache-flink,flink-sql,Apache Flink,Flink Sql,我正在使用flink创建一个ETL和欺诈管理模块,以分析一系列实时信用卡交易 所有事务都由公开的API接收,该API将数据推送到Kafka主题中。 首先,需要检查和清理接收到的数据,然后将其存储在数据库中。 下一步是对这些交易进行欺诈分析 在第一步中,使用Flink,我必须在卡片数据库中检查卡片是否已知,然后才能继续。问题是,这个数据库中大约有10亿张卡片,随着时间的推移,可能会添加新的卡片。 因此,我不确定是否可以将整个卡号缓存在内存中,或者如何有效地处理此检查:Flink是否能够处理某种滑动

我正在使用flink创建一个ETL和欺诈管理模块,以分析一系列实时信用卡交易

所有事务都由公开的API接收,该API将数据推送到Kafka主题中。 首先,需要检查和清理接收到的数据,然后将其存储在数据库中。 下一步是对这些交易进行欺诈分析

在第一步中,使用Flink,我必须在卡片数据库中检查卡片是否已知,然后才能继续。问题是,这个数据库中大约有10亿张卡片,随着时间的推移,可能会添加新的卡片。
因此,我不确定是否可以将整个卡号缓存在内存中,或者如何有效地处理此检查:Flink是否能够处理某种滑动缓存来批量检查卡的存在?

您可能要做的是将卡数据库镜像到Flink的密钥分区状态,或者在堆上,或者使用RocksDB,如果您想将其溢出到磁盘。密钥分区状态在集群中分片,因此如果您确实希望将整个卡数据库保留在内存中,可以扩展集群,直到可行为止

要仅保留最近看到的值,您可以依赖于使最近未访问的记录过期


另一种选择是:Flink SQL支持对JDBC数据库执行流式查找连接,您可以为此配置缓存。

您能否澄清“Flink是否能够处理某种滑动缓存以批量检查卡的存在?”我在考虑一种缓存,将最近看到的第n个值存储在流中。您可以将TTL声明为使暂时不需要的值过期。