Я ищу лучший способ объединения нескольких (> 20) потоков 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
. Я не уверен, какой из них даст мне самую быструю пропускную способность событий от первоначальных потоков до объединенного. Кроме того, есть ли оператор, который будет использоваться во всех потоках одновременно, или я должен просто вызывать каждые 2 потока одновременно?
Я ищу, чтобы получить один поток, который тогда будет keyedBy
userId
поле, это имеет какое-то значение?
Что касается примечания, следующим шагом является «сортировка» событий (в каждом window
) для каждого userId
по eventTimestamp
, чтобы получить хронологический порядок событий по таким userId
.