我正在寻找合并多个(> 20个)Flink流的最佳方法,这些Flink流表示我们系统中事件的不同起源。所有类型都相同。
List<DataStream<Event>> dataStreams = ...
每个对象都是一个POJO(显然是抽象表示)
public class Event implements Serializable {
public String userId;
public long eventTimestamp;
public String eventData;
}
我最终想结束一个流
DataStream<Event> merged;
有不同的管理方式:join
,coGroup
,map
/ flatMap
(使用CoGroup
)和union
。
我不确定其中哪一个会为我提供从原始流到合并流的事件最快的吞吐量。
而且,是否有一个运算符可以一次在所有流上使用,还是应该一次只调用两个流?
我正在寻找一个流,该流将成为keyedBy
userId
字段,这有什么区别吗?
另一方面,下一步是将每个window
的事件(每个userId
中的事件)与eventTimestamp
进行“排序”,以得到每个事件的时间顺序userId
。
答案 0 :(得分:3)
如果事件具有相同的类型,那么我肯定会选择union
,因为它是最简单,最简单的形式。另外,请注意,并集采用vararg作为参数,这基本上意味着您可以在一个调用中加入所有流。