微信公众号:深广大数据Club
关注可了解更多大数据相关的资讯。问题或建议,请公众号留言;
[如果你觉得深广大数据Club对你有帮助,欢迎赞赏]
从上一片《Flink源码解析 | 从Example出发理解Flink-Flink启动》之后,本文讲解Apache Flink example中的SocketWindowWordCount实例代码的实现。
SocketWindowWordCount
首先我们先来看下SocketWindowWordCount的重要代码内容
上述代码分为以下几块内容:
获取执行环境
实例化DataStream对象
执行数据处理获取windowCounts
Map - flatMap
transaction - keyby
reduce
打印
调用env的execute运行任务
这里的MapFunction以及ReduceFunction可以根据你的业务场景自行实现。
StreamExecutionEnvironment实例化
创建StreamExecutionEnvironment时线检查是否存在contextEnvironmentFactory,如果有直接从contextEnvironmentFactory创建返回。没有则通过ExecutionEnvironment创建。
本地模式调用createLocalEnvironment()方法创建StreamEnvironment。
方法一轮轮调用下来最终实例化一个LocalStreamEnvironment返回。
LocalStreamEnvironment
整体代码分为以下几步:
创建streamGraph
通过streamGraph创建jobGraph
创建Configuration
创建MiniClusterConfiguration,并设置每一个TaskManager使用的slot数量setNumSlotsPerTaskManager
创建miniCluster
通过miniCluster.executeJobBlocking执行jobGraph
注:jobGraph是我们要利用miniCluster运行获取结果的Graph有向无环图。
MiniCluster
MiniCluster所做的事情较多,具体步骤如下:
获取配置信息
初始化 IO Format类
注册MetricsRegistry并实例化jobManagerMetricGroup
启动rpc服务
启动HA服务
启动resourceManager
启动TaskManagers
启动调度程序rest端口
在提交工作时启动JobManagers的分配器
获取ResourceManagerLeader、dispatcherLeaderRetriever并启动
总结
简化的描述下整个流程的处理过程:
创建获取对应的StreamExecutionEnvironment对象:LocalStreamEnvironment
调用StreamExecutionEnvironment对象的execute方法
获取streamGraph
获取jobGraph
实例化miniCluster
miniCluster.executeJobBlocking指定要运行的jobGraph
启动minCluster执行任务
启动各类所需服务(rpc、ha、resourceManager、TaskManagers等等)
领取专属 10元无门槛券
私享最新 技术干货