浅议Flink中算子间的八种数据传输策略

一、知识铺垫

a. Flink数据传输分类

Flink数据传输分为 组件之间的通信消息传输 和 算子之间的流数据传输。

(1)组件之间

组件(即Client、JobManager、TaskManager)之间的通信消息传输采用Akka框架。常见的通信包括心跳检测、状态上报、指标统计、作业提交和部署等。

(2)算子之间

(2.1)本地线程内(同一个SubTask内的两个Operator):数据传输通过方法调用进行,即上游算子处理完数据后,直接调用下游算子的processElement方法。

(2.2)本地线程间(同一个TaskManager的不同SubTask中):数据传输通过本地内存进行,需要进行数据的序列化和反序列化。

(2.3)跨网络(不同TaskManager的SubTask中):采用Netty框架,通过Socket进行数据传输,也需要进行数据的序列化和反序列化。

Flink中为上下游subtask之间数据传输(即上述2.2&2.3)提供了九种传输策略。

其中BinaryHashPartitioner位于Blink的Table API的org.apache.flink.table.runtime.partitioner包中,是一种针对BinaryRowData的哈希分区器。

本文讨论上图中绿色框圈中的八种策略。

在Flink WebUI中,可看到算子之间的传输策略会在箭头上标注出来。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值