Apache flink 在Apache Flink中聚合两种不同类型的记录

Apache flink 在Apache Flink中聚合两种不同类型的记录,apache-flink,Apache Flink,我有一个特定的任务,就是使用带有一些附加逻辑的apacheflink将两个数据流连接到一个聚合中 基本上我有两个数据流:事件流和所谓的元事件流。我使用apachekafka作为消息主干。我试图实现的是根据元事件中给出的信息,触发评估的聚合/窗口。基本情况是: 事件的数据流开始发出类型A的记录 记录基于某个键在某个聚合或窗口中不断累积 元事件数据流使用给定的键接收新的元事件,该键还定义了将在事件数据流中发出的事件总量 步骤3中的事件数成为聚合的触发标准。具有给定键的类型a事件总数等于具有给定键的元

我有一个特定的任务,就是使用带有一些附加逻辑的apacheflink将两个数据流连接到一个聚合中

基本上我有两个数据流:事件流和所谓的
元事件流。我使用
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
    中的目标事件数是相等的。