Как Flink обеспечивает порядок данных между операторами?

В потоковой системе порядок данных - большая проблема.

мы знаем, что во flink обработка данных происходит не по порядку, используется окно и водяной знак.

Но, во внутреннем флинке, между операторами, как гарантировать порядок данных?

Может ли flink гарантировать, что в первую очередь будут обработаны расширенные данные?

или в операторах порядок данных не в порядке


person chen amos    schedule 22.09.2020    source источник


Ответы (1)


Во Flink нет никаких гарантий сохранения порядка данных (по крайней мере, если у вас есть параллелизм ›1). Например. у вас есть поток с оператором map() с parallelism == 2, а затем вы выполняете groupBy(), за которым следует какая-то другая операция. На одном сервере подзадача карты обрабатывает данные очень быстро, а на другом - очень медленно. Порядок, в котором данные принимаются каждым разделом после groupBy, очевидно, не будет соответствовать исходному порядку данных.

Если вам требуется строгий порядок, вам придется буферизовать / сортировать себя в операторе и решать те же проблемы с поздними данными, с которыми сталкивается оконный оператор (т.е. сколько времени вы хотите, прежде чем решить, что вы не можете получить запись, которую следует отсортировать перед последней записью в буфере).

person kkrugler    schedule 22.09.2020