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



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

基本上我有两个数据流:事件流和所谓的meta-events流。我使用Apache Kafka作为消息主干。我试图实现的是根据meta-event中提供的信息触发评估aggregation/window。基本方案是:

  1. 事件的数据流开始发出Type A的记录;
  2. 记录在基于某个键的某个聚合或窗口中不断累积;
  3. 元事件数据流接收一个带有给定键的新meta-event,该键还定义了将在事件数据流中发出的事件总量。
  4. 构成步骤的事件数3成为聚合的触发条件。在具有给定键的Type A个事件总数等于具有给定键的meta-event中定义的数后,应触发聚合以进行评估。

步骤13按非确定性顺序发生,因此可以重新排序。

我尝试的是分析Flink Global Windows,但不确定这是否是一个好的和适当的解决方案。我也不确定这样的问题是否有解决方案Apache Flink.

任何可能的帮助都非常感谢。

简单的答案是.connect()两个流,在每个流中keyBy()相应的字段,然后将它们运行到自定义KeyedCoProcessFunction中。您将当前聚合结果和计数保存在左侧 (Type A( 流状态中,将目标计数保存在右侧 (meta-event( 流状态中,并在聚合计数 == 目标计数时生成结果。

但是这里有一个问题 - 如果在获取该键的meta-event记录之前在Type A流中获取 N 条记录,并且目标计数> N 条记录,会发生什么情况?从本质上讲,您要么必须保证不会发生这种情况,要么需要缓冲Type A事件(处于状态(,直到获得meta-event记录。

当然,如果可以将meta-event目标更改为较小的值,则可能会出现类似的情况。

相关内容

  • 没有找到相关文章

最新更新