合并多个 Flink DataStreams 的最佳方式是什么?

What is the best way to merge multiple Flink DataStreams?

我正在寻找合并多个 (>20) Flink 流的最佳方法,这些流代表我们系统中不同的事件来源,所有这些都具有相同的类型。

List<DataStream<Event>> dataStreams = ...

其中每个对象都是一个 POJO(显然是抽象表示)

public class Event implements Serializable {
  public String userId;
  public long eventTimestamp;
  public String eventData;

}

我最终想以单一流结束

DataStream<Event> merged;

有不同的管理方式:joincoGroupmap/flatMap(使用CoGroup)和union . 我不确定它们中的哪一个会给我最快的从原始流到合并流的事件吞吐量。 此外,是否有一个运算符可以同时用于所有流,或者我应该一次只调用每 2 个流?

我正在寻找一个流,然后将是 keyedBy userId 字段,这有什么不同吗?

附带说明一下,下一步是 'sort' eventTimestamp 每个 userId 的事件(在每个 window 中)以获得时间顺序每个这样的事件 userId.

如果事件具有相同的类型,我肯定会选择 union,因为它是最简单的形式,也是最简单的形式。另外,请注意 union 将 vararg 作为参数,这基本上意味着您可以在一次调用中加入所有流。