在流系统中,数据顺序是个大问题。
我们知道在flink中,使用窗口和水印会乱序处理数据。
但是,在内部链接中,运算符之间如何保证数据的顺序?
flink可以确保先处理高级数据吗?
或在运算符中,数据顺序不正确
答案 0 :(得分:1)
在Flink中,不能保证保留数据顺序(或者至少在并行度> 1时不能保证)。例如。您的流带有并行度== 2的import "package:collection/collection.dart";
main(List<String> args) {
var data = [
{"title": 'Avengers', "release_date": '10/01/2019'},
{"title": 'Creed', "release_date": '10/01/2019'},
{"title": 'Jumanji', "release_date": '30/10/2019'},
];
var newMap = groupBy(data, (obj) => obj['release_date']);
print(newMap);
}
运算符,然后执行map()
,然后进行其他操作。在一个服务器上,map子任务非常快地处理数据,而在另一服务器上,它非常慢。 groupBy之后每个分区接收数据的顺序显然与数据的原始顺序不匹配。
如果需要严格的排序,则必须在运算符中进行缓冲/排序,并处理与开窗运算符遇到的相同的后期数据问题(即,在决定您不能可能会得到一条应该在缓冲区中最后一条记录之前排序的记录。