Flink中的DataStream可以在两个算子间传输数据的模式有哪些?
1.一对一
例如Source 和 map()算子之间。
可保留元素的分区和排序信息(也就是说map()算子的1号实例可以相同顺序看到跟Source算子的1号实例生产顺序相同的元素)。
2.重分发-类似MR Shuffle
例如的 map()和 keyBy/window算子 之间,以及 keyBy/window和 Sink 之间。
会更改数据所在Stream分区。注意此时只能保证一个算子subtask发到一个下游算子subtask的元素顺序性。如上图keyBy/window 的 subtask[2] 接收到的 map() 的 subtask[1]的数据有序,但发送到Sink的所有数据中,无法确定不同key的聚合结果的到达顺序。
每个算子subtask发送数据到不同的下游算子subtask,分发依据是具体的transformation(相关方法在org.apache.flink.streaming.api.datastream.DataStream):
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。