Каков наилучший способ объединения нескольких Flink DataStreams? - PullRequest
1 голос
/ 26 марта 2020

Я ищу лучший способ объединения нескольких (> 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.

1 Ответ

3 голосов
/ 26 марта 2020

Если события имеют один и тот же тип, я бы наверняка набрал go с union, так как это самая простая и самая простая форма. Также обратите внимание, что объединение принимает vararg в качестве параметра, что в основном означает, что Вы можете объединить все потоки за один вызов.

...