flink启动原理入口分析
此处使用分析的flink版本为1.10.0
直接使用jobmanager.sh 和 taskmanager.sh 启动单机模式的flink服务的脚本逻辑其实是调用 flink-daemon.sh
Usage: flink-daemon.sh (start|stop|stop-all) (taskexecutor|zookeeper|historyserver|standalonesession|standalonejob) [args]
里面有启动的入口类,即可以追踪到flink单机版启动逻辑 case $DAEMON in (taskexecutor) CLASS_TO_RUN=org.apache.flink.runtime.taskexecutor.TaskManagerRunner ;; (zookeeper) CLASS_TO_RUN=org.apache.flink.runtime.zookeeper.FlinkZooKeeperQuorumPeer ;; (historyserver) CLASS_TO_RUN=org.apache.flink.runtime.webmonitor.history.HistoryServer ;; (standalonesession) CLASS_TO_RUN=org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint ;; (standalonejob) CLASS_TO_RUN=org.apache.flink.container.entrypoint.StandaloneJobClusterEntryPoint ;;
可以得出jobmanager和taskmanager的独立启动入口类
org.apache.flink.container.entrypoint.StandaloneJobClusterEntryPoint
org.apache.flink.runtime.taskexecutor.TaskManagerRunner
和本地集群方式启动入口类
org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint
其他脚本的执行其实都是使用的这个脚本逻辑,如start-cluster.sh脚本启动,不管是启动HA模式,还是非HA模式,都会执行jobmanager.sh脚本,所以都会走flink-daemon.sh
那我们就可以通过代码进行分析了
StandaloneSessionClusterEntrypoint启动源码,StandaloneSessionClusterEntrypoint继承自SessionClusterEntrypoint // 进行启动检查,获取启动环境信息,如版本,scala版本,git提交号,jvm版本,hadoop版本,javahome等 EnvironmentInformation.logEnvironmentInfo(LOG, StandaloneSessionClusterEntrypoint.class.getSimpleName(), args); // 捕捉系统信号windows包含:终止(TERM),INT(键盘中断);其它系统多包含:HUP(终端挂起或者控制进程终止) SignalHandler.register(LOG); // 注册JVM关闭的钩子函数 设置5秒延迟退出 JvmShutdownSafeguard.installAsShutdownHook(LOG); // 获取启动行参数,使用的是org.apache.commons.cli // 所有的启动参数都写在了org.apache.flink.runtime.entrypoint.parser.CommandLineOptions类中 // 包括: // c configDir: Directory which contains the configuration file flink-conf.yml. // r webui-port: Port for the rest endpoint and the web UI. // D property=value: use value for given property // h host: Hostname for the RPC service. // x executionMode: Deprecated option EntrypointClusterConfiguration entrypointClusterConfiguration = null; final CommandLineParser commandLineParser = new CommandLineParser<>(new EntrypointClusterConfigurationParserFactory()); try { entrypointClusterConfiguration = commandLineParser.parse(args); } catch (FlinkParseException e) { LOG.error("Could not parse command line arguments {}.", args, e); commandLineParser.printHelp(StandaloneSessionClusterEntrypoint.class.getSimpleName()); System.exit(1); } // 获取到参数 Configuration configuration = loadConfiguration(entrypointClusterConfiguration); StandaloneSessionClusterEntrypoint entrypoint = new StandaloneSessionClusterEntrypoint(configuration); // 运行 执行父类方法 ClusterEntrypoint.runClusterEntrypoint(entrypoint);
SessionClusterEntrypoint 继承ClusterEntrypoint public static void runClusterEntrypoint(ClusterEntrypoint clusterEntrypoint) { final String clusterEntrypointName = clusterEntrypoint.getClass().getSimpleName(); try { //启动集群方法 clusterEntrypoint.startCluster(); } catch (ClusterEntrypointException e) { LOG.error(String.format("Could not start cluster entrypoint %s.", clusterEntrypointName), e); System.exit(STARTUP_FAILURE_RETURN_CODE); } clusterEntrypoint.getTerminationFuture().whenComplete((applicationStatus, throwable) -> { final int returnCode; if (throwable != null) { returnCode = RUNTIME_FAILURE_RETURN_CODE; } else { returnCode = applicationStatus.processExitCode(); } LOG.info("Terminating cluster entrypoint process {} with exit code {}.", clusterEntrypointName, returnCode, throwable); System.exit(returnCode); }); }
进入ClusterEntrypoint的startCluster方法
public void startCluster() throws ClusterEntrypointException { try { replaceGracefulExitWithHaltIfConfigured(configuration); // 初始化共享文件系统设置,会将文件系统映射为url configureFileSystems(configuration); // 初始化安全上下文:其中为进程范围的安全配置,使用可用的安全模块(即Hadoop、JAAS)应用配置。 SecurityContext securityContext = installSecurityContext(configuration); securityContext.runSecured((Callable) () -> { runCluster(configuration); return null; }); } }
接下来进入runCluster方法 private void runCluster(Configuration configuration) throws Exception { synchronized (lock) { //初始化集群服务, initializeServices(configuration); // write host information into configuration configuration.setString(JobManagerOptions.ADDRESS, commonRpcService.getAddress()); configuration.setInteger(JobManagerOptions.PORT, commonRpcService.getPort()); final DispatcherResourceManagerComponentFactory dispatcherResourceManagerComponentFactory = createDispatcherResourceManagerComponentFactory(configuration); clusterComponent = dispatcherResourceManagerComponentFactory.create( configuration, ioExecutor, commonRpcService, haServices, blobServer, heartbeatServices, metricRegistry, archivedExecutionGraphStore, new RpcMetricQueryServiceRetriever(metricRegistry.getMetricQueryServiceRpcService()), this);
根据上述服务创建资源,调度,监控进程DispatcherResourceManagerComponent,并设置同步状态关闭,这之中还包含网关及查询服务检索器的创建,基本了解了flink启动读取运行参数,获取本地配置,并增加了JVM关闭钩子等一些我们平常开发不常用的一些方法,flink的启动流程刚刚迈入门槛。
后续看看flink是如何实现这些服务,并管理好task,保证服务的稳定性的。
2022年冲上岸的10种奇异生物每年,奇异海洋生物的遗骸都会被冲上世界各地的海滩上,揭示了地球上一些最难以捉摸和神秘的生物。2022年也不例外。从白鲸和巨型鱿鱼到小企鹅和成群的水母,这里我来和大家一起探索白座头鲸
孕期做春梦,会引起流产吗?孕期有没有宝妈做春梦?这个当然有,而且还是90的孕妈妈在孕期做过春梦,我也不例外,孕期做过2次春梦。为什么孕期会出现做春梦呢?闭着眼睛都能想到孕期肯定受性激素的影响,由于孕期雌激素
28天女婴差点失去双眼罪魁祸首几乎家家有,千万别粗心!日常生活中酒精是常见的消毒手段但在使用时却需要格外注意稍有不当就容易引发事故近期错把酒精当生理盐水28天女婴角膜烧伤的词条登上热搜近日湖北武汉市江夏区陈女士28天大的孩子患有泪道堵
浮图缘南苑王暗桩早已浮出水面,肖铎深陷危局不自知浮图缘是一部古装爱情权谋剧,由王鹤棣陈钰琪何润东曾黎王栎鑫张绍刚等实力演员主演,正在爱奇艺热播中。在最新的剧情中,福王慕容天巩刚刚登基为帝,根基浅薄朝堂不稳,无数野心勃勃之辈在暗中
10天9人身亡!都是老人!12月22日江西九江濂溪区十里新村一村民家中起火消防人员将火扑灭并从火场中救出一名八旬老人事后了解到原来老人在家做饭时打瞌睡忘记锅里还烧着菜导致烧干锅引发火灾冬春火灾多发大家一定要
上港乐了!足协杯再出意外主帅亲承,泰山遇2大难题,冠军悬了足协杯8进4的比赛即将打响,对于踌躇满志的几支豪门来说,足协杯也是必争之地。尤其中超联赛已经结束,几大豪门将全力攻坚足协杯。尤其中超传统劲旅山东泰山,以及豪门上海上港。一足协杯的形
浙江金华多举措助力企业新年开门稳开门红1月3日,工人在金华卓远实业有限公司的车间内打包一批出口的助力电动自行车。这是一家专业从事助力电动自行车电动滑板车电机铝合金车架及配件的研发制造销售于一体的外贸企业。新年伊始,浙江
国乒新年阵容大洗牌2大世界冠军告别,3人升官1人上位1人隐退国乒新年大调整!刘国梁洗牌2大世界冠军告别3人升官1人隐退进入2023年意味着新年新气象,国乒针对过去一年球队的表现做出总结,对阵容进行了大洗牌。而且,这次调整不仅限于运动员,教练
年末新机总结2022年已发布的10款骁龙8Gen2机型,你看好哪款?谁也没有想到双十一才入手了最新的骁龙8旗舰后,时隔一个月不到就成了旧款,骁龙8Gen2旗舰在2022年的最后一个月如雨后春笋般疯长,气势一度盖过一众骁龙8机型!在一个月时间里,机圈
华为机主看过来鸿蒙3。0又有四款机型开放升级中关村在线消息1月3日,HarmonyOS官方微博宣布了最新的升级进展HUAWEInova75GHUAWEInova7Pro5GHUAWEInova6HUAWEInova65G四款
2023大家都在读什么书?作者云昭1多云架构和治理在这个云生万物的软件世界,拥有多种云服务的组织需要明确的云管理策略。本书通过总结从多种云应用框架中获取的最佳实践,帮助用户解决复杂的云安全问题,同时,它还强
国庆第三天,打卡酉阳龙潭古镇此次国庆小长假,原来打算的,就是逛一下渝东南的著名景点,至少也应是4A或以上的。既到了酉阳,十月二日住一晚后,店家极力推荐,距此三十来公里的龙潭古镇,值得一看。出酉阳县城。对对直直
工信部电信业务分类目录(2019年修订)电信业务分类目录(2019年版)目录A基础电信业务A1第一类基础电信业务A11固定通信业务A111固定网本地通信业务A112固定网国内长途通信业务A113固定网国际长途通信业务A1
iPhone14贬值幅度是iPhone13两倍机构苹果iPhone14标准版贬值幅度是iPhone13mini两倍每经AI快讯,根据SellCell收集的数据,相比去年同一时间段,苹果iPhone14机型的贬值幅度是iPhon
继人工智能后,又一专业人才缺口将达到327万,2023高考生需了解高考热门专业向来是准高考生和家长最关心的问题,然而每年专业热度都会有很大的变化,因此家长不能只关注当下,更应该着眼未来,才能让学生在4年后本科毕业时能更快找到对口工作。在家长眼中医
6999元,买了华为Mate50Pro,用了10天后的真实感受其实在买华为Mate50Pro之前,我一直想买iPhone14Plus的。不过后来内心纠结了很久之后,觉得应该支持一下国产品牌,于是以6999元抢到了一台昆仑玻璃版的Mate50P
两马皆骏马因梦分雌雄硅谷钢铁侠马斯克马斯克和马云都是风云人物,两者皆为骏马,也许在众人看来都是商界大亨,在世界上独占一席之地。不过在愚者看来,两者因梦想不同,认知不同,胸怀格局不同,马斯克的境界似乎高
美文丨有一种豁然,叫重阳不知不觉间又到了节日重阳。苍龙七宿落退,乾德刚健,坤德柔和,天兆吉象。岁月不居。这些年,总觉得太阳尚高,人生很长,可过着过着日子就短了,活着活着人就老了。短到手中握不住日月,老得眼
有所悟最大的信任,最好的关系一个人,对另一个人最大的信任,就是从不去猜想对方在想什么,而是做自己应该做的事情。当我发自内心意识到这一点,并放弃了惯性的猜想与负向思维,我发现,我战胜了自己。由此,河清海晏,美美
文案快乐出现的时候享受快乐。1。频繁的拍照只是想在未来看看青春。2。懂事有趣,干干净净做自己。3。不被情绪裹挟才是高级的自由。4。不要问,不要等,不要犹豫,不要回头。5。慢慢才知道生活和朋友越简单越好。6。别
谁怜秋风携暗香,入芸窗谁怜秋风携暗香,入芸窗在字里行间谱一曲荡气回肠谁相信一眸擦肩,不回头成为往后余生的念念不忘知更鸟失落在大唐城墙上等风起云涌荻花飞雪谁立水中央,左手托明月,右手擎秋光舞一季蒹葭苍苍夜
大家都是第一次长大,凭什么要让着你慢慢出逃只觉得月夜下的人很美,那是黑夜铺卷而来前最后一线光。我不想让它如星辰般陨落,我便开始了在明与暗的边缘回旋,我借了方寸之地只有一石之隔,寸心的闪烁点亮了记忆的方向,眼前是何等