Apache flink 如何将Apache Flink与查找数据一起使用?

Apache flink 如何将Apache Flink与查找数据一起使用?,apache-flink,Apache Flink,嗨 使用ApacheFlink1.8。我有一个来自卡夫卡的JSON记录流,并对它们进行过滤,所有这些都可以正常工作 现在,我想用数据库表中的查找值来丰富Kafka中的数据 这只是创建两个流,在第二个流中加载表,然后连接数据的情况吗 数据库表确实会更新,但并不经常更新,我希望避免在流中的每个记录上查找数据库。Flink有状态,您可以在这里利用它。我也做过类似的事情,每天从我的查找表(在我的例子中是一个批量Web服务调用)中进行一次查询,并通过查询结果生成一个kafka主题。这个卡夫卡主题正被需要数

使用ApacheFlink1.8。我有一个来自卡夫卡的JSON记录流,并对它们进行过滤,所有这些都可以正常工作

现在,我想用数据库表中的查找值来丰富Kafka中的数据

这只是创建两个流,在第二个流中加载表,然后连接数据的情况吗


数据库表确实会更新,但并不经常更新,我希望避免在流中的每个记录上查找数据库。

Flink有状态,您可以在这里利用它。我也做过类似的事情,每天从我的查找表(在我的例子中是一个批量Web服务调用)中进行一次查询,并通过查询结果生成一个kafka主题。这个卡夫卡主题正被需要数据进行查找的同一个服务flink作业使用。这两个主题的键控值相同,但我使用查找主题将数据存储到键控状态,当处理另一个主题时,我会将数据拉回到非键控状态

我有一些额外的逻辑来检查给定密钥是否还没有状态。如果是这样,我会向Web服务发出异步请求。但是,您可能不需要这样做

这里需要注意的是,我有用于状态管理的内存,我的查找表只有大约3000万条记录,大约100千兆位分布在15个节点上的45个插槽中

[回答评论中的问题] 对不起,我的回答太长了,所以不得不编辑我的帖子:

我有一个python作业,它通过一个大容量REST调用加载数据(您的可以只进行数据查找)。然后,它将数据转换成正确的格式,并将其转储到卡夫卡中。然后我的flink流有两个来源,一个是“真实数据”主题,另一个是“查找数据”主题。来自查找数据主题的数据存储在state中(我使用了ValueState,因为每个键都映射到一个可能的值,但是有。我对每个条目都有24小时的过期时间,但这是我的用例


诀窍在于,将值存储在查找主题的状态中的操作必须是将值从“真实”主题中拉回到状态之外的操作与创建它们的操作员有关。

我的查找表没有那么大,可能只有几百行。但是,您是如何将数据加载到单独的流中的呢?@user432024我更新了我的帖子来回答您的问题。很酷。我接受您的答案。实际上,我也有类似的想法,因为我已经在使用Apache Ignite了……还有also:我在flink中使用异步进程的经验不是很好。在内部,它似乎使用了Executor服务,如果数据流太高,Executor的任务队列就会满。添加任务队列会阻塞,直到队列中有空间为止,这会产生反压力。对我来说,这会导致延迟增加,最终导致mes下降sages。根据我的经验,避免异步进程,除非请求数量可以保持在最低限度。好吧,在我的情况下。我将有一个作业加载到Apache Ignite,我将有一个FlatMap,它执行查找以点燃并以这种方式丰富数据。示例: