apache flink—存储无限流的元素x,直到y元素到达,然后加入它们

ki1q1bka  于 2021-06-24  发布在  Flink
关注(0)|答案(1)|浏览(321)

我想知道使用apacheflink是否可以解决以下问题。
假设我有一个包含两个表的数据库:“clients”和“orders”。“orders”表包含一个名为“client\u id\u fk”的外键,该外键表示“clients”表的主键,称为“client\u id”。现在,假设我捕获表上发生的事件,比如插入、更新和删除,然后将所有这些传递给一个无限的flink数据流。当事件进入flink数据流时,它会将它们写入另一个存储中,例如apachekafka主题。
假设在“clients”中添加了五条新记录:a、b、c、d、e,并且flink数据流以精确的顺序接收这些记录。现在,假设在“orders”中添加了记录o_a,表示客户机;然后,这个事件也被推送到flink数据流中。正如我之前所描述的,每个事件到达数据流时都将直接写入kafka主题中;我的问题来了:在apache flink中,有没有一种方法可以存储事件a,直到事件a到达,然后加入它们,然后将它们写在kafka主题中?很明显,我知道我必须等oïa之后再写一篇关于主题的文章。
总而言之,flink数据流按以下顺序接收以下事件:
a、 b、c、d、e、o
当它接收到事件a时,它应该存储它并等待直到事件a到达,而不是将它写入apachekafka主题中;然后,它将它们连接起来,然后将它们写在主题内。
我提前向大家表示感谢,有没有可能用javaapacheflinkapi编写一个直观的代码片段来演示如何实现这一点?

w9apscun

w9apscun1#

是的,这对Flink来说是可行的。使用datastreamapi,您可以通过按client\u id键控client流和按client\u id\u fk键控orders流,并使用keyedcomprocessfunction连接这两个键控流来实现这一点。在这个操作符中,您将使用keyed state来存储客户机记录,直到订单到达。
ververica提供的flink培训包含了几个关于如何实现一个几乎相同的连接的示例——这里和这里都将介绍这些示例,但是为了更好地理解它们,我建议从头开始。

相关问题