Flink 如何保证算子之间的数据顺序?

How does Flink ensure the order of data between operators?

在流式系统中,数据的顺序是个大问题。

我们知道在flink中,对数据进行乱序处理,就是利用了window和watermark。

但是,在flink内部,operator之间,如何保证数据的顺序?

flink能保证先处理高级数据吗?

或者运算符中,数据顺序乱序

在 Flink 中,无法保证保留数据顺序(或者至少在并行度 > 1 时不会)。例如。你有一个带有并行度 == 2 的 map() 运算符的流,然后你执行 groupBy() 后跟一些其他操作。在一台服务器上,地图 sub-task 处理数据的速度非常快,而在另一台服务器上则非常慢。 groupBy之后各个partition接收数据的顺序显然不会和数据原来的顺序一致。

如果您需要严格排序,那么您将不得不 buffer/sort 自己在操作员中处理窗口操作员遇到的相同延迟数据问题(即您需要多长时间才能决定您不可能获得应排在缓冲区中最后一条记录之前的记录。