概念

性能调优

最后需要强调的是,KeyBy 操作只有当 Key 的数量超过算子的并发实例数才可以较好的工作。由于同一个 Key 对应的所有数据都会发送到同一个实例上,因此如果Key 的数量比实例数量少时,就会导致部分实例收不到数据,从而导致计算能力不能充分发挥。

并行度

  1. 操作算子级别 - 通过 setParallelism () API 设置单个算子的并行度
  2. 执行环境配置 - 通过 API env. setParallelism () 进行全局设置
  3. client 级别 - 通过 flink run 命令行参数 -p 指定
  4. 系统级别 - 集群的 conf 配置 parallelism.default

task分发

从Source开始广度优先遍历,装配到Slot上。

Yarn-Session模式

AM拉起TM

Dispatcher收到JobGraph拉起JobManager。AM向ResourceManager通过ApplicationMasterProtocol.allocate申请容器资源。
如果有空闲Slot资源,SlotManager将其分配给等待请求队列中匹配的请求,不用再通过YarnResourceManager申请新的TaskManager。会直接跳到AM向TaskManager分发任务阶段。
如果没空闲Slot//TODO 资源申请上限检查需要探索,不可能无限启动TM索要Slot。那么具体检查在那阶段进行呢,不一定在此阶段的。还要再看一遍阿里云的文章。

选举

ResourceManager获得Leadership(leader非standby状态)才会开启SlotManager
Dispatcher获得Leadership后会recover 所有持久化的Job。//TODO 需要进一步探索如何recover

Leader选举原理:

相关类

ZooKeeperLeaderRetrievalService implements LeaderRetrievalService 负责开启对ZK选举地址的监听如/leader/resource_manager_lock、/leader/dispatcher_lock,选举完成后得到通知。
ZooKeeperLeaderElectionService implements LeaderElectionService
Flink使用Apache Curator中Leader Latch选举算法,Curator中另一个是Leader Election

tmp目录
启动时会把进程pid写到下面文件
/tmp/flink-${user}-standalonesession.pid
/tmp/flink-${user}-taskexecutor.pid
taskmanger编号根据上面文件自增

Kyro虽然高效但是泛型配合Kyro序列化可能有问题。
getExecutionEnvironment

image.png

参考资料

官方

https://yq.aliyun.com/teams/67/type_blog
https://ververica.cn/
非官方中文文档
https://flink-docs-cn.gitbook.io/project/

个人博客

http://wuchong.me/
https://zhoukaibo.com/
https://www.whitewood.me/
https://blog.jrwang.me
http://shzhangji.com/cnblogs/
http://www.liaojiayi.com/
https://zhuanlan.51cto.com/columnlist/jinzhu/
http://www.54tianzhisheng.cn/

精彩文章

https://zhuanlan.zhihu.com/p/70827849
https://www.cnblogs.com/bethunebtj/p/9168274.html