Apache flink 在Apache Flink中聚合两种不同类型的记录
我有一个特定的任务,就是使用带有一些附加逻辑的apacheflink将两个数据流连接到一个聚合中 基本上我有两个数据流:事件流和所谓的Apache flink 在Apache Flink中聚合两种不同类型的记录,apache-flink,Apache Flink,我有一个特定的任务,就是使用带有一些附加逻辑的apacheflink将两个数据流连接到一个聚合中 基本上我有两个数据流:事件流和所谓的元事件流。我使用apachekafka作为消息主干。我试图实现的是根据元事件中给出的信息,触发评估的聚合/窗口。基本情况是: 事件的数据流开始发出类型A的记录 记录基于某个键在某个聚合或窗口中不断累积 元事件数据流使用给定的键接收新的元事件,该键还定义了将在事件数据流中发出的事件总量 步骤3中的事件数成为聚合的触发标准。具有给定键的类型a事件总数等于具有给定键的元
元事件流。我使用apachekafka
作为消息主干。我试图实现的是根据元事件
中给出的信息,触发评估的聚合/窗口
。基本情况是:
事件的数据流开始发出类型A的记录
李>
记录基于某个键在某个聚合或窗口中不断累积李>
元事件数据流使用给定的键接收新的元事件
,该键还定义了将在事件数据流中发出的事件总量
步骤3
中的事件数成为聚合的触发标准。具有给定键的类型a
事件总数等于具有给定键的元事件中定义的数字后,应触发聚合以进行评估
步骤1
和3
的顺序不确定,因此可以重新排序
我试着分析Flink Global Windows,但不确定它是否是一个好的、适当的解决方案。我也不确定这样的问题在ApacheFlink中是否有解决方案
非常感谢任何可能的帮助。最简单的答案是.connect()
两个流,keyBy()
在每个流中选择适当的字段,然后将它们运行到自定义的keyedcorprocessfunction
。将当前聚合结果和计数保存在左侧(类型A
)流状态,将目标计数保存在右侧(元事件
)流状态,并在聚合计数==目标计数时生成结果
但是这里有一个问题-如果在获取该键的元事件
记录之前,在Type A
流中获取N条记录,并且N>目标计数,会发生什么?基本上,您要么必须保证不会发生这种情况,要么需要缓冲类型A
事件(处于状态),直到您获得元事件
记录
当然,如果将元事件
目标更改为较小的值,可能会出现类似的情况。简单的答案是.connect()
两个流,keyBy()
每个流中的适当字段,然后将它们运行到自定义的keyedcomprocessfunction
中。将当前聚合结果和计数保存在左侧(类型A
)流状态,将目标计数保存在右侧(元事件
)流状态,并在聚合计数==目标计数时生成结果
但是这里有一个问题-如果在获取该键的元事件
记录之前,在Type A
流中获取N条记录,并且N>目标计数,会发生什么?基本上,您要么必须保证不会发生这种情况,要么需要缓冲类型A
事件(处于状态),直到您获得元事件
记录
当然,如果将元事件
目标更改为较小的值,也可能出现类似情况。Hi@kkruglet,谢谢!在我的例子中,meta
中的目标事件数是相等的。您好@kkruglet,谢谢!在我的例子中,meta
中的目标事件数是相等的。